{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 动态滚动优化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from __future__ import division\n",
    "\n",
    "from vnpy.trader.vtConstant import EMPTY_STRING, EMPTY_FLOAT\n",
    "from vnpy.trader.app.ctaStrategy.ctaTemplate import (CtaTemplate, \n",
    "                                                     BarGenerator,\n",
    "                                                     ArrayManager)\n",
    "import talib as ta\n",
    "\n",
    "########################################################################\n",
    "# 策略继承CtaTemplate\n",
    "class MultiFrameMaStrategy(CtaTemplate):\n",
    "    \"\"\"双指数均线策略Demo\"\"\"\n",
    "    className = 'MultiFrameMaStrategy'\n",
    "    author = u'用Python的交易员'\n",
    "    \n",
    "    # 策略交易标的的列表\n",
    "    symbolList = []         # 初始化为空\n",
    "    posDict = {}  # 初始化仓位字典\n",
    "    \n",
    "    # 多空仓位\n",
    "    Longpos = EMPTY_STRING        # 多头品种仓位\n",
    "    Shortpos = EMPTY_STRING       # 空头品种仓位\n",
    "    \n",
    "    # 策略参数\n",
    "    fastWindow = 40     # 快速均线参数\n",
    "    slowWindow = 70     # 慢速均线参数\n",
    "    initDays = 1       # 初始化数据所用的天数\n",
    "    \n",
    "    # 策略变量\n",
    "    fastMa0 = EMPTY_FLOAT   # 当前最新的快速EMA\n",
    "    fastMa1 = EMPTY_FLOAT   # 上一根的快速EMA\n",
    "    slowMa0 = EMPTY_FLOAT   # 当前最新的慢速EMA\n",
    "    slowMa1 = EMPTY_FLOAT   # 上一根的慢速EMA\n",
    "    maTrend = 0             # 均线趋势，多头1，空头-1\n",
    "    \n",
    "    # 参数列表，保存了参数的名称\n",
    "    paramList = ['name',\n",
    "                 'className',\n",
    "                 'author',\n",
    "                 'vtSymbol',\n",
    "                 'symbolList',\n",
    "                 'fastWindow',\n",
    "                 'slowWindow']    \n",
    "    \n",
    "    # 变量列表，保存了变量的名称\n",
    "    varList = ['inited',\n",
    "               'trading',\n",
    "               'posDict',\n",
    "               'fastMa0',\n",
    "               'fastMa1',\n",
    "               'slowMa0',\n",
    "               'slowMa1',\n",
    "               'maTrend']  \n",
    "    \n",
    "    # 同步列表，保存了需要保存到数据库的变量名称\n",
    "    syncList = ['posDict']\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def __init__(self, ctaEngine, setting):\n",
    "        \n",
    "        # 首先找到策略的父类（就是类CtaTemplate），然后把DoubleMaStrategy的对象转换为类CtaTemplate的对象\n",
    "        super(MultiFrameMaStrategy, self).__init__(ctaEngine, setting)\n",
    "        \n",
    "        # 生成仓位记录的字典\n",
    "        symbol = self.symbolList[0]\n",
    "        self.Longpos = symbol.replace('.','_')+\"_LONG\"\n",
    "        self.Shortpos = symbol.replace('.','_')+\"_SHORT\"\n",
    "        \n",
    "        \n",
    "        self.bg60 = BarGenerator(self.onBar, 60, self.on60MinBar)\n",
    "        self.bg60Dict = {\n",
    "            sym: self.bg60\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "        \n",
    "        \n",
    "        self.bg15 = BarGenerator(self.onBar, 15, self.on15MinBar)\n",
    "        self.bg15Dict = {\n",
    "            sym: self.bg15\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "        \n",
    "        # 生成Bar数组\n",
    "        self.am60Dict = {\n",
    "            sym: ArrayManager(size=self.slowWindow+10)\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "      \n",
    "        self.am15Dict = {\n",
    "            sym: ArrayManager(size=self.slowWindow+10)\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def onInit(self):\n",
    "        \"\"\"初始化策略（必须由用户继承实现）\"\"\"\n",
    "        self.writeCtaLog(u'双EMA演示策略初始化')\n",
    "        # 初始化仓位字典\n",
    "        if not self.posDict:\n",
    "            for symbolPos in [self.Longpos,self.Shortpos]:\n",
    "                self.posDict[symbolPos] = 0\n",
    "\n",
    "        # 初始化历史数据天数\n",
    "        initData = self.loadBar(self.initDays)\n",
    "        for bar in initData:\n",
    "            self.onBar(bar)\n",
    "        \n",
    "        self.putEvent()\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onStart(self):\n",
    "        \"\"\"启动策略（必须由用户继承实现）\"\"\"\n",
    "        self.writeCtaLog(u'双EMA演示策略启动')\n",
    "        self.putEvent()\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def onStop(self):\n",
    "        \"\"\"停止策略（必须由用户继承实现）\"\"\"\n",
    "        self.writeCtaLog(u'双EMA演示策略停止')\n",
    "        self.putEvent()\n",
    "        \n",
    "    #----------------------------------------------------------------------\n",
    "    def onTick(self, tick):\n",
    "        \"\"\"收到行情TICK推送（必须由用户继承实现）\"\"\"\n",
    "        pass\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def onBar(self, bar):\n",
    "        \"\"\"收到Bar推送（必须由用户继承实现）\"\"\"\n",
    "        self.cancelAll()\n",
    "        symbol = bar.vtSymbol\n",
    "        # 基于60分钟判断趋势过滤，因此先更新\n",
    "        bg60 = self.bg60Dict[symbol]\n",
    "        bg60.updateBar(bar)\n",
    "        \n",
    "        # 基于15分钟判断\n",
    "        bg15 = self.bg15Dict[symbol]\n",
    "        bg15.updateBar(bar)\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def on60MinBar(self, bar):\n",
    "        \"\"\"60分钟K线推送\"\"\"\n",
    "        symbol = bar.vtSymbol\n",
    "        am60 = self.am60Dict[symbol]\n",
    "        am60.updateBar(bar)\n",
    "        \n",
    "        if not am60.inited:\n",
    "            return\n",
    "        \n",
    "        # 计算均线并判断趋势\n",
    "        fastMa = ta.MA(am60.close, self.fastWindow)\n",
    "        slowMa = ta.MA(am60.close, self.slowWindow)\n",
    "#         print(fastMa)\n",
    "        \n",
    "        if fastMa[-1] > slowMa[-1]:\n",
    "            self.maTrend = 1\n",
    "        else:\n",
    "            self.maTrend = -1\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def on15MinBar(self, bar):\n",
    "        \"\"\"收到Bar推送（必须由用户继承实现）\"\"\"\n",
    "        self.cancelAll() # 全部撤单\n",
    "        symbol = bar.vtSymbol\n",
    "        \n",
    "        \n",
    "        am15 = self.am15Dict[symbol]\n",
    "        am15.updateBar(bar)\n",
    "        if not am15.inited:\n",
    "            return\n",
    "\n",
    "        fastMa = ta.EMA(am15.close, self.fastWindow)\n",
    "       \n",
    "        self.fastMa0 = fastMa[-1]\n",
    "        self.fastMa1 = fastMa[-2]\n",
    "        \n",
    "        slowMa = ta.EMA(am15.close, self.slowWindow)\n",
    "        self.slowMa0 = slowMa[-1]\n",
    "        self.slowMa1 = slowMa[-2]\n",
    "\n",
    "        # 判断买卖\n",
    "        crossOver = self.fastMa0>self.fastMa1 and self.slowMa0>self.slowMa1     # 均线上涨\n",
    "        crossBelow = self.fastMa0<self.fastMa1 and self.slowMa0<self.slowMa1    # 均线下跌\n",
    "        \n",
    "\n",
    "        \n",
    "        # 金叉和死叉的条件是互斥\n",
    "        if crossOver and self.maTrend==1:\n",
    "            # 如果金叉时手头没有持仓，则直接做多\n",
    "            if (self.posDict[self.Longpos]==0) and (self.posDict[self.Shortpos]==0):\n",
    "                self.buy(symbol,bar.close, 1)\n",
    "            # 如果有空头持仓，则先平空，再做多\n",
    "            elif self.posDict[self.Shortpos] == 1:\n",
    "                self.cover(symbol,bar.close, 1)\n",
    "                self.buy(symbol,bar.close, 1)\n",
    "\n",
    "        # 死叉和金叉相反\n",
    "        elif crossBelow and self.maTrend==-1:\n",
    "            if (self.posDict[self.Longpos]==0) and (self.posDict[self.Shortpos]==0):\n",
    "                self.short(symbol,bar.close, 1)\n",
    "            elif self.posDict[self.Longpos] == 1:\n",
    "                self.sell(symbol,bar.close, 1)\n",
    "                self.short(symbol,bar.close, 1)\n",
    "\n",
    "        \n",
    "        # 发出状态更新事件\n",
    "        self.putEvent()\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def onOrder(self, order):\n",
    "        \"\"\"收到委托变化推送（必须由用户继承实现）\"\"\"\n",
    "        # 对于无需做细粒度委托控制的策略，可以忽略onOrder\n",
    "        pass\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def onTrade(self, trade):\n",
    "        \"\"\"收到成交推送（必须由用户继承实现）\"\"\"\n",
    "        # 对于无需做细粒度委托控制的策略，可以忽略onOrder\n",
    "#         print(self.posDict)\n",
    "        pass\n",
    "    \n",
    "    #----------------------------------------------------------------------\n",
    "    def onStopOrder(self, so):\n",
    "        \"\"\"停止单推送\"\"\"\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from vnpy.trader.app.ctaStrategy.ctaBacktesting import BacktestingEngine, OptimizationSetting, MINUTE_DB_NAME\n",
    "import pandas as pd\n",
    "\n",
    "def backTest(startDate, endDate):\n",
    "    engine = BacktestingEngine()\n",
    "    engine.setBacktestingMode(engine.BAR_MODE)    # 设置引擎的回测模式为K线\n",
    "    engine.setDatabase(MINUTE_DB_NAME)  # 设置使用的历史数据库\n",
    "    \n",
    "    engine.setStartDate(startDate,initDays=1)               # 设置回测用的数据起始日期\n",
    "    engine.setEndDate(endDate)\n",
    "    \n",
    "    engine.setSlippage(0.2)     # 设置滑点为股指1跳\n",
    "    engine.setRate(1/1000)   # 设置手续费万0.3\n",
    "    engine.setSize(1)         # 设置股指合约大小\n",
    "    engine.setPriceTick(0.01)    # 设置股指最小价格变动\n",
    "    engine.setCapital(1000000)  # 设置回测本金\n",
    "    engine.initStrategy(MultiFrameMaStrategy, {'symbolList':['tBTCUSD:bitfinex']})\n",
    "    engine.setCapital(100000)\n",
    "    engine.runBacktesting()\n",
    "    # 优化配置\n",
    "    setting = OptimizationSetting()                 # 新建一个优化任务设置对象\n",
    "    setting.setOptimizeTarget('totalNetPnl')        # 设置优化排序的目标是策略净盈利\n",
    "    setting.addParameter('fastWindow', 20, 40, 10)    # 增加第一个优化参数atrLength，起始12，结束20，步进2\n",
    "    setting.addParameter('slowWindow', 50, 80, 10)        # 增加第二个优化参数atrMa，起始20，结束30，步进5\n",
    "    setting.addParameter('symbolList', ['tBTCUSD:bitfinex']) \n",
    "\n",
    "    # 执行多进程优化\n",
    "    import time\n",
    "    import json\n",
    "    start = time.time()\n",
    "    # resultList = engine.runParallelOptimization(MultiFrameMaStrategy, setting)\n",
    "    resultList = engine.runOptimization(MultiFrameMaStrategy, setting)\n",
    "    print('耗时：%s' %(time.time()-start))\n",
    "    performance = pd.DataFrame(resultList).sort_values(1,  ascending=False).iloc[0:2]\n",
    "    bestParameter = performance.iloc[0,0][0].replace(\"'\",'\"')\n",
    "    newParameter = json.loads(bestParameter)\n",
    "    \n",
    "    return newParameter\n",
    "\n",
    "def stepParameterDF(startDate, endDate):\n",
    "    allBestParameter = {endDate: backTest(startDate, endDate) for startDate, endDate in tuple(zip(startDate, endDate))}\n",
    "    stepParameter= pd.DataFrame(allBestParameter).T\n",
    "    stepParameter.index = pd.Index(map(lambda x: datetime.strptime(str(x),\"%Y%m%d\") , stepParameter.index))\n",
    "    return stepParameter"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参数说明\n",
    "1. startDate:开始时间为日期\n",
    "2. backTestDay: 回测的总天数\n",
    "3. paraDate： 用于优化参数的时间长度\n",
    "4. stepDate: 用于回测的时间长度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:46:24.330132\t开始回测\n",
      "2018-07-14 15:46:24.330132\t策略初始化\n",
      "2018-07-14 15:46:24.330132\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:46:24.466992\t载入完成，数据量：1414\n",
      "2018-07-14 15:46:24.479978\t策略初始化完成\n",
      "2018-07-14 15:46:24.479978\t策略启动完成\n",
      "2018-07-14 15:46:24.479978\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:46:24.479978\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:46:31.371943\t载入完成，数据量：73437\n",
      "2018-07-14 15:46:31.371943\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:46:32.445846\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:46:32.468822\t------------------------------\n",
      "2018-07-14 15:46:32.468822\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:46:32.468822\t开始回测\n",
      "2018-07-14 15:46:32.468822\t策略初始化\n",
      "2018-07-14 15:46:32.468822\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:46:32.599688\t载入完成，数据量：1414\n",
      "2018-07-14 15:46:32.611676\t策略初始化完成\n",
      "2018-07-14 15:46:32.611676\t策略启动完成\n",
      "2018-07-14 15:46:32.611676\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:46:32.611676\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:46:39.187962\t载入完成，数据量：73437\n",
      "2018-07-14 15:46:39.187962\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:46:40.174955\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:46:40.174955\t计算按日统计结果\n",
      "2018-07-14 15:46:40.213916\t------------------------------\n",
      "2018-07-14 15:46:40.213916\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:46:40.213916\t开始回测\n",
      "2018-07-14 15:46:40.214914\t策略初始化\n",
      "2018-07-14 15:46:40.214914\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:46:40.341785\t载入完成，数据量：1414\n",
      "2018-07-14 15:46:40.360765\t策略初始化完成\n",
      "2018-07-14 15:46:40.360765\t策略启动完成\n",
      "2018-07-14 15:46:40.361764\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:46:40.361764\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:46:46.753238\t载入完成，数据量：73437\n",
      "2018-07-14 15:46:46.753238\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:46:47.818151\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:46:47.818151\t计算按日统计结果\n",
      "2018-07-14 15:46:47.855115\t------------------------------\n",
      "2018-07-14 15:46:47.855115\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:46:47.855115\t开始回测\n",
      "2018-07-14 15:46:47.855115\t策略初始化\n",
      "2018-07-14 15:46:47.855115\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:46:47.972993\t载入完成，数据量：1414\n",
      "2018-07-14 15:46:47.984980\t策略初始化完成\n",
      "2018-07-14 15:46:47.984980\t策略启动完成\n",
      "2018-07-14 15:46:47.984980\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:46:47.984980\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:46:54.227607\t载入完成，数据量：73437\n",
      "2018-07-14 15:46:54.227607\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:46:55.175639\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:46:55.175639\t计算按日统计结果\n",
      "2018-07-14 15:46:55.215598\t------------------------------\n",
      "2018-07-14 15:46:55.216597\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:46:55.216597\t开始回测\n",
      "2018-07-14 15:46:55.216597\t策略初始化\n",
      "2018-07-14 15:46:55.216597\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:46:55.338473\t载入完成，数据量：1414\n",
      "2018-07-14 15:46:55.351461\t策略初始化完成\n",
      "2018-07-14 15:46:55.351461\t策略启动完成\n",
      "2018-07-14 15:46:55.351461\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:46:55.352459\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:01.721956\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:01.721956\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:02.645013\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:02.645013\t计算按日统计结果\n",
      "2018-07-14 15:47:02.686970\t------------------------------\n",
      "2018-07-14 15:47:02.686970\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:02.687970\t开始回测\n",
      "2018-07-14 15:47:02.687970\t策略初始化\n",
      "2018-07-14 15:47:02.687970\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:02.809845\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:02.822833\t策略初始化完成\n",
      "2018-07-14 15:47:02.822833\t策略启动完成\n",
      "2018-07-14 15:47:02.823831\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:02.823831\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:08.937589\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:08.937589\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:09.891614\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:09.891614\t计算按日统计结果\n",
      "2018-07-14 15:47:09.927578\t------------------------------\n",
      "2018-07-14 15:47:09.927578\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:09.928579\t开始回测\n",
      "2018-07-14 15:47:09.928579\t策略初始化\n",
      "2018-07-14 15:47:09.928579\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:10.053450\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:10.066436\t策略初始化完成\n",
      "2018-07-14 15:47:10.066436\t策略启动完成\n",
      "2018-07-14 15:47:10.066436\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:10.067435\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:16.356015\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:16.357014\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:17.327022\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:17.327022\t计算按日统计结果\n",
      "2018-07-14 15:47:17.362986\t------------------------------\n",
      "2018-07-14 15:47:17.362986\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:17.362986\t开始回测\n",
      "2018-07-14 15:47:17.362986\t策略初始化\n",
      "2018-07-14 15:47:17.362986\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:17.477869\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:17.490856\t策略初始化完成\n",
      "2018-07-14 15:47:17.490856\t策略启动完成\n",
      "2018-07-14 15:47:17.490856\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:17.490856\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:23.819395\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:23.819395\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:24.758436\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:24.758436\t计算按日统计结果\n",
      "2018-07-14 15:47:24.794399\t------------------------------\n",
      "2018-07-14 15:47:24.794399\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:24.794399\t开始回测\n",
      "2018-07-14 15:47:24.794399\t策略初始化\n",
      "2018-07-14 15:47:24.794399\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:24.914278\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:24.929262\t策略初始化完成\n",
      "2018-07-14 15:47:24.930261\t策略启动完成\n",
      "2018-07-14 15:47:24.930261\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:24.930261\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:31.234824\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:31.235822\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:32.234802\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:32.234802\t计算按日统计结果\n",
      "2018-07-14 15:47:32.275762\t------------------------------\n",
      "2018-07-14 15:47:32.275762\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:32.275762\t开始回测\n",
      "2018-07-14 15:47:32.275762\t策略初始化\n",
      "2018-07-14 15:47:32.275762\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:32.394640\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:32.407627\t策略初始化完成\n",
      "2018-07-14 15:47:32.407627\t策略启动完成\n",
      "2018-07-14 15:47:32.408626\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:32.408626\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:38.471434\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:38.472434\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:39.419467\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:39.419467\t计算按日统计结果\n",
      "2018-07-14 15:47:39.456429\t------------------------------\n",
      "2018-07-14 15:47:39.456429\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:39.456429\t开始回测\n",
      "2018-07-14 15:47:39.456429\t策略初始化\n",
      "2018-07-14 15:47:39.456429\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:39.578306\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:39.592291\t策略初始化完成\n",
      "2018-07-14 15:47:39.592291\t策略启动完成\n",
      "2018-07-14 15:47:39.592291\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:39.592291\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:45.598160\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:45.599159\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:46.535202\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:46.535202\t计算按日统计结果\n",
      "2018-07-14 15:47:46.571165\t------------------------------\n",
      "2018-07-14 15:47:46.571165\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:46.571165\t开始回测\n",
      "2018-07-14 15:47:46.571165\t策略初始化\n",
      "2018-07-14 15:47:46.571165\t载入历史数据。数据范围:[20171231,20180101)\n",
      "2018-07-14 15:47:46.686049\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:46.698036\t策略初始化完成\n",
      "2018-07-14 15:47:46.698036\t策略启动完成\n",
      "2018-07-14 15:47:46.698036\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:46.698036\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:47:52.707901\t载入完成，数据量：73437\n",
      "2018-07-14 15:47:52.708899\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:47:53.665922\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:47:53.665922\t计算按日统计结果\n",
      "2018-07-14 15:47:53.701886\t------------------------------\n",
      "2018-07-14 15:47:53.701886\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:47:53.701886\t开始回测\n",
      "2018-07-14 15:47:53.701886\t策略初始化\n",
      "2018-07-14 15:47:53.701886\t载入历史数据。数据范围:[20171231,20180101)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:47:53.821762\t载入完成，数据量：1414\n",
      "2018-07-14 15:47:53.833751\t策略初始化完成\n",
      "2018-07-14 15:47:53.833751\t策略启动完成\n",
      "2018-07-14 15:47:53.833751\t开始回放回测数据,回测范围:[20180101,20180221)\n",
      "2018-07-14 15:47:53.833751\t载入历史数据。数据范围:[20180101,20180221)\n",
      "2018-07-14 15:48:00.026427\t载入完成，数据量：73437\n",
      "2018-07-14 15:48:00.027427\t当前回放数据:[20180101,20180221)\n",
      "2018-07-14 15:48:01.070362\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:01.070362\t计算按日统计结果\n",
      "2018-07-14 15:48:01.083348\t------------------------------\n",
      "2018-07-14 15:48:01.083348\t优化结果：\n",
      "2018-07-14 15:48:01.083348\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：7064.686000000001\n",
      "2018-07-14 15:48:01.083348\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：6602.177740031622\n",
      "2018-07-14 15:48:01.083348\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：6375.1035999999995\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：5898.423199999999\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：5370.920800000002\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4819.671400000001\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4483.990599999997\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4434.3279999999995\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4076.14534\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：3695.80088\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：3133.3532\n",
      "2018-07-14 15:48:01.084347\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1028.9690599999979\n",
      "耗时：88.6385018825531\n",
      "2018-07-14 15:48:01.085346\t开始回测\n",
      "2018-07-14 15:48:01.085346\t策略初始化\n",
      "2018-07-14 15:48:01.085346\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:01.220209\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:01.236194\t策略初始化完成\n",
      "2018-07-14 15:48:01.236194\t策略启动完成\n",
      "2018-07-14 15:48:01.236194\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:01.236194\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:07.499797\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:07.499797\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:08.503773\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:08.531744\t------------------------------\n",
      "2018-07-14 15:48:08.531744\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:08.531744\t开始回测\n",
      "2018-07-14 15:48:08.531744\t策略初始化\n",
      "2018-07-14 15:48:08.531744\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:08.655617\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:08.668604\t策略初始化完成\n",
      "2018-07-14 15:48:08.668604\t策略启动完成\n",
      "2018-07-14 15:48:08.668604\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:08.669603\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:14.980160\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:14.980160\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:15.953173\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:15.954171\t计算按日统计结果\n",
      "2018-07-14 15:48:15.990136\t------------------------------\n",
      "2018-07-14 15:48:15.990136\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:15.990136\t开始回测\n",
      "2018-07-14 15:48:15.990136\t策略初始化\n",
      "2018-07-14 15:48:15.990136\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:16.111012\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:16.124998\t策略初始化完成\n",
      "2018-07-14 15:48:16.124998\t策略启动完成\n",
      "2018-07-14 15:48:16.124998\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:16.124998\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:22.601386\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:22.602385\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:23.602363\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:23.602363\t计算按日统计结果\n",
      "2018-07-14 15:48:23.639327\t------------------------------\n",
      "2018-07-14 15:48:23.639327\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:23.639327\t开始回测\n",
      "2018-07-14 15:48:23.639327\t策略初始化\n",
      "2018-07-14 15:48:23.639327\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:23.775188\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:23.789172\t策略初始化完成\n",
      "2018-07-14 15:48:23.789172\t策略启动完成\n",
      "2018-07-14 15:48:23.789172\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:23.789172\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:30.139691\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:30.140688\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:31.109698\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:31.110697\t计算按日统计结果\n",
      "2018-07-14 15:48:31.145661\t------------------------------\n",
      "2018-07-14 15:48:31.145661\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:31.145661\t开始回测\n",
      "2018-07-14 15:48:31.145661\t策略初始化\n",
      "2018-07-14 15:48:31.146661\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:31.263542\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:31.277527\t策略初始化完成\n",
      "2018-07-14 15:48:31.277527\t策略启动完成\n",
      "2018-07-14 15:48:31.277527\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:31.277527\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:37.486188\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:37.487188\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:38.493164\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:38.493164\t计算按日统计结果\n",
      "2018-07-14 15:48:38.538116\t------------------------------\n",
      "2018-07-14 15:48:38.538116\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:38.538116\t开始回测\n",
      "2018-07-14 15:48:38.538116\t策略初始化\n",
      "2018-07-14 15:48:38.538116\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:38.654999\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:38.682968\t策略初始化完成\n",
      "2018-07-14 15:48:38.682968\t策略启动完成\n",
      "2018-07-14 15:48:38.682968\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:38.683967\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:44.643882\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:44.644881\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:45.617889\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:45.618889\t计算按日统计结果\n",
      "2018-07-14 15:48:45.654851\t------------------------------\n",
      "2018-07-14 15:48:45.654851\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:45.654851\t开始回测\n",
      "2018-07-14 15:48:45.654851\t策略初始化\n",
      "2018-07-14 15:48:45.654851\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:45.779722\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:45.790713\t策略初始化完成\n",
      "2018-07-14 15:48:45.790713\t策略启动完成\n",
      "2018-07-14 15:48:45.790713\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:45.791711\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:51.786591\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:51.787591\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:52.723634\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:52.723634\t计算按日统计结果\n",
      "2018-07-14 15:48:52.762594\t------------------------------\n",
      "2018-07-14 15:48:52.762594\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:52.762594\t开始回测\n",
      "2018-07-14 15:48:52.762594\t策略初始化\n",
      "2018-07-14 15:48:52.762594\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:48:52.879476\t载入完成，数据量：1440\n",
      "2018-07-14 15:48:52.890464\t策略初始化完成\n",
      "2018-07-14 15:48:52.891463\t策略启动完成\n",
      "2018-07-14 15:48:52.891463\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:48:52.891463\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:48:58.931296\t载入完成，数据量：73438\n",
      "2018-07-14 15:48:58.931296\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:48:59.872335\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:48:59.872335\t计算按日统计结果\n",
      "2018-07-14 15:48:59.910296\t------------------------------\n",
      "2018-07-14 15:48:59.910296\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:48:59.910296\t开始回测\n",
      "2018-07-14 15:48:59.910296\t策略初始化\n",
      "2018-07-14 15:48:59.910296\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:49:00.083120\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:00.095107\t策略初始化完成\n",
      "2018-07-14 15:49:00.096107\t策略启动完成\n",
      "2018-07-14 15:49:00.096107\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:49:00.096107\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:49:06.220853\t载入完成，数据量：73438\n",
      "2018-07-14 15:49:06.220853\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:49:07.151902\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:07.151902\t计算按日统计结果\n",
      "2018-07-14 15:49:07.186867\t------------------------------\n",
      "2018-07-14 15:49:07.187865\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:49:07.187865\t开始回测\n",
      "2018-07-14 15:49:07.187865\t策略初始化\n",
      "2018-07-14 15:49:07.187865\t载入历史数据。数据范围:[20180120,20180121)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:49:07.304747\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:07.321730\t策略初始化完成\n",
      "2018-07-14 15:49:07.321730\t策略启动完成\n",
      "2018-07-14 15:49:07.321730\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:49:07.322729\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:49:13.559361\t载入完成，数据量：73438\n",
      "2018-07-14 15:49:13.560361\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:49:14.593305\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:14.593305\t计算按日统计结果\n",
      "2018-07-14 15:49:14.629268\t------------------------------\n",
      "2018-07-14 15:49:14.630267\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:49:14.630267\t开始回测\n",
      "2018-07-14 15:49:14.630267\t策略初始化\n",
      "2018-07-14 15:49:14.630267\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:49:14.746150\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:14.760135\t策略初始化完成\n",
      "2018-07-14 15:49:14.760135\t策略启动完成\n",
      "2018-07-14 15:49:14.760135\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:49:14.761135\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:49:20.902863\t载入完成，数据量：73438\n",
      "2018-07-14 15:49:20.902863\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:49:21.981766\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:21.981766\t计算按日统计结果\n",
      "2018-07-14 15:49:22.017731\t------------------------------\n",
      "2018-07-14 15:49:22.017731\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:49:22.017731\t开始回测\n",
      "2018-07-14 15:49:22.017731\t策略初始化\n",
      "2018-07-14 15:49:22.017731\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:49:22.152591\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:22.170574\t策略初始化完成\n",
      "2018-07-14 15:49:22.171572\t策略启动完成\n",
      "2018-07-14 15:49:22.171572\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:49:22.171572\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:49:28.821784\t载入完成，数据量：73438\n",
      "2018-07-14 15:49:28.821784\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:49:29.947633\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:29.947633\t计算按日统计结果\n",
      "2018-07-14 15:49:29.984596\t------------------------------\n",
      "2018-07-14 15:49:29.984596\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:49:29.984596\t开始回测\n",
      "2018-07-14 15:49:29.984596\t策略初始化\n",
      "2018-07-14 15:49:29.984596\t载入历史数据。数据范围:[20180120,20180121)\n",
      "2018-07-14 15:49:30.104473\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:30.117459\t策略初始化完成\n",
      "2018-07-14 15:49:30.117459\t策略启动完成\n",
      "2018-07-14 15:49:30.117459\t开始回放回测数据,回测范围:[20180121,20180313)\n",
      "2018-07-14 15:49:30.117459\t载入历史数据。数据范围:[20180121,20180313)\n",
      "2018-07-14 15:49:36.649791\t载入完成，数据量：73438\n",
      "2018-07-14 15:49:36.649791\t当前回放数据:[20180121,20180313)\n",
      "2018-07-14 15:49:37.696721\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:37.696721\t计算按日统计结果\n",
      "2018-07-14 15:49:37.713704\t------------------------------\n",
      "2018-07-14 15:49:37.713704\t优化结果：\n",
      "2018-07-14 15:49:37.713704\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：3471.4103999999998\n",
      "2018-07-14 15:49:37.713704\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2788.5436000000013\n",
      "2018-07-14 15:49:37.713704\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2608.307800000001\n",
      "2018-07-14 15:49:37.713704\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1829.6029880328174\n",
      "2018-07-14 15:49:37.713704\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1799.3375800000022\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1095.7994000000022\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：954.6363999999999\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：582.9938951380996\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-846.340000000002\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-1513.9606070052773\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-1695.63377145588\n",
      "2018-07-14 15:49:37.714703\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-1733.9765319355586\n",
      "耗时：89.21093034744263\n",
      "2018-07-14 15:49:37.715701\t开始回测\n",
      "2018-07-14 15:49:37.715701\t策略初始化\n",
      "2018-07-14 15:49:37.715701\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:49:37.844572\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:37.857559\t策略初始化完成\n",
      "2018-07-14 15:49:37.858557\t策略启动完成\n",
      "2018-07-14 15:49:37.858557\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:49:37.858557\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:49:44.405872\t载入完成，数据量：73276\n",
      "2018-07-14 15:49:44.406871\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:49:45.428827\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:45.450805\t------------------------------\n",
      "2018-07-14 15:49:45.451804\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:49:45.451804\t开始回测\n",
      "2018-07-14 15:49:45.451804\t策略初始化\n",
      "2018-07-14 15:49:45.451804\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:49:45.568686\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:45.581672\t策略初始化完成\n",
      "2018-07-14 15:49:45.581672\t策略启动完成\n",
      "2018-07-14 15:49:45.581672\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:49:45.582671\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:49:51.822301\t载入完成，数据量：73276\n",
      "2018-07-14 15:49:51.823299\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:49:52.865234\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:49:52.865234\t计算按日统计结果\n",
      "2018-07-14 15:49:52.901198\t------------------------------\n",
      "2018-07-14 15:49:52.902198\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:49:52.902198\t开始回测\n",
      "2018-07-14 15:49:52.902198\t策略初始化\n",
      "2018-07-14 15:49:52.902198\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:49:53.029068\t载入完成，数据量：1440\n",
      "2018-07-14 15:49:53.043054\t策略初始化完成\n",
      "2018-07-14 15:49:53.043054\t策略启动完成\n",
      "2018-07-14 15:49:53.043054\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:49:53.043054\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:49:59.185782\t载入完成，数据量：73276\n",
      "2018-07-14 15:49:59.186782\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:00.197748\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:00.197748\t计算按日统计结果\n",
      "2018-07-14 15:50:00.237707\t------------------------------\n",
      "2018-07-14 15:50:00.237707\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:00.237707\t开始回测\n",
      "2018-07-14 15:50:00.237707\t策略初始化\n",
      "2018-07-14 15:50:00.237707\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:00.360583\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:00.372570\t策略初始化完成\n",
      "2018-07-14 15:50:00.372570\t策略启动完成\n",
      "2018-07-14 15:50:00.372570\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:00.373570\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:06.924881\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:06.924881\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:07.874910\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:07.874910\t计算按日统计结果\n",
      "2018-07-14 15:50:07.913871\t------------------------------\n",
      "2018-07-14 15:50:07.913871\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:07.913871\t开始回测\n",
      "2018-07-14 15:50:07.913871\t策略初始化\n",
      "2018-07-14 15:50:07.913871\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:08.032749\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:08.047734\t策略初始化完成\n",
      "2018-07-14 15:50:08.047734\t策略启动完成\n",
      "2018-07-14 15:50:08.047734\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:08.048734\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:14.221432\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:14.222432\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:15.177454\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:15.177454\t计算按日统计结果\n",
      "2018-07-14 15:50:15.214417\t------------------------------\n",
      "2018-07-14 15:50:15.214417\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:15.214417\t开始回测\n",
      "2018-07-14 15:50:15.214417\t策略初始化\n",
      "2018-07-14 15:50:15.214417\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:15.341287\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:15.353274\t策略初始化完成\n",
      "2018-07-14 15:50:15.353274\t策略启动完成\n",
      "2018-07-14 15:50:15.353274\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:15.353274\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:21.855653\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:21.856650\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:22.784702\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:22.784702\t计算按日统计结果\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:50:22.825661\t------------------------------\n",
      "2018-07-14 15:50:22.825661\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:22.825661\t开始回测\n",
      "2018-07-14 15:50:22.825661\t策略初始化\n",
      "2018-07-14 15:50:22.825661\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:22.943541\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:22.957526\t策略初始化完成\n",
      "2018-07-14 15:50:22.957526\t策略启动完成\n",
      "2018-07-14 15:50:22.957526\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:22.957526\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:29.351296\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:29.352295\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:30.320306\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:30.320306\t计算按日统计结果\n",
      "2018-07-14 15:50:30.359266\t------------------------------\n",
      "2018-07-14 15:50:30.359266\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:30.360266\t开始回测\n",
      "2018-07-14 15:50:30.360266\t策略初始化\n",
      "2018-07-14 15:50:30.360266\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:30.477146\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:30.489134\t策略初始化完成\n",
      "2018-07-14 15:50:30.489134\t策略启动完成\n",
      "2018-07-14 15:50:30.489134\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:30.490133\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:37.117367\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:37.117367\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:38.144318\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:38.144318\t计算按日统计结果\n",
      "2018-07-14 15:50:38.181280\t------------------------------\n",
      "2018-07-14 15:50:38.181280\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:38.181280\t开始回测\n",
      "2018-07-14 15:50:38.181280\t策略初始化\n",
      "2018-07-14 15:50:38.181280\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:38.298162\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:38.322137\t策略初始化完成\n",
      "2018-07-14 15:50:38.323135\t策略启动完成\n",
      "2018-07-14 15:50:38.323135\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:38.323135\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:44.537790\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:44.538790\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:45.675628\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:45.675628\t计算按日统计结果\n",
      "2018-07-14 15:50:45.716587\t------------------------------\n",
      "2018-07-14 15:50:45.716587\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:45.716587\t开始回测\n",
      "2018-07-14 15:50:45.716587\t策略初始化\n",
      "2018-07-14 15:50:45.716587\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:45.846454\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:45.860440\t策略初始化完成\n",
      "2018-07-14 15:50:45.861438\t策略启动完成\n",
      "2018-07-14 15:50:45.861438\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:45.862438\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:50:52.999153\t载入完成，数据量：73276\n",
      "2018-07-14 15:50:53.000153\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:50:54.067435\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:50:54.067435\t计算按日统计结果\n",
      "2018-07-14 15:50:54.116385\t------------------------------\n",
      "2018-07-14 15:50:54.116385\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:50:54.116385\t开始回测\n",
      "2018-07-14 15:50:54.116385\t策略初始化\n",
      "2018-07-14 15:50:54.116385\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:50:54.253248\t载入完成，数据量：1440\n",
      "2018-07-14 15:50:54.268232\t策略初始化完成\n",
      "2018-07-14 15:50:54.268232\t策略启动完成\n",
      "2018-07-14 15:50:54.268232\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:50:54.268232\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:51:00.900461\t载入完成，数据量：73276\n",
      "2018-07-14 15:51:00.900461\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:51:01.951388\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:01.951388\t计算按日统计结果\n",
      "2018-07-14 15:51:01.987351\t------------------------------\n",
      "2018-07-14 15:51:01.987351\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:01.987351\t开始回测\n",
      "2018-07-14 15:51:01.987351\t策略初始化\n",
      "2018-07-14 15:51:01.987351\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:51:02.103234\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:02.116221\t策略初始化完成\n",
      "2018-07-14 15:51:02.117220\t策略启动完成\n",
      "2018-07-14 15:51:02.117220\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:51:02.118219\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:51:08.702495\t载入完成，数据量：73276\n",
      "2018-07-14 15:51:08.702495\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:51:09.730446\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:09.730446\t计算按日统计结果\n",
      "2018-07-14 15:51:09.766409\t------------------------------\n",
      "2018-07-14 15:51:09.766409\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:09.766409\t开始回测\n",
      "2018-07-14 15:51:09.766409\t策略初始化\n",
      "2018-07-14 15:51:09.766409\t载入历史数据。数据范围:[20180209,20180210)\n",
      "2018-07-14 15:51:09.897276\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:09.911262\t策略初始化完成\n",
      "2018-07-14 15:51:09.911262\t策略启动完成\n",
      "2018-07-14 15:51:09.911262\t开始回放回测数据,回测范围:[20180210,20180402)\n",
      "2018-07-14 15:51:09.911262\t载入历史数据。数据范围:[20180210,20180402)\n",
      "2018-07-14 15:51:16.139902\t载入完成，数据量：73276\n",
      "2018-07-14 15:51:16.140901\t当前回放数据:[20180210,20180402)\n",
      "2018-07-14 15:51:17.360655\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:17.360655\t计算按日统计结果\n",
      "2018-07-14 15:51:17.378637\t------------------------------\n",
      "2018-07-14 15:51:17.378637\t优化结果：\n",
      "2018-07-14 15:51:17.378637\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：6223.47498803282\n",
      "2018-07-14 15:51:17.378637\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：5468.013900000003\n",
      "2018-07-14 15:51:17.378637\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：5426.294480000003\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4790.600900000001\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4703.2219000000005\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：4684.294226817883\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：3978.502195138098\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2046.0096000000026\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-86.46910000000366\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-307.99119196717993\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-1246.7739714558782\n",
      "2018-07-14 15:51:17.379635\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-2251.9941070052764\n",
      "耗时：91.95080876350403\n",
      "2018-07-14 15:51:17.380635\t开始回测\n",
      "2018-07-14 15:51:17.380635\t策略初始化\n",
      "2018-07-14 15:51:17.380635\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:51:17.507506\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:17.522492\t策略初始化完成\n",
      "2018-07-14 15:51:17.522492\t策略启动完成\n",
      "2018-07-14 15:51:17.522492\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:51:17.522492\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:51:23.763119\t载入完成，数据量：73168\n",
      "2018-07-14 15:51:23.763119\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:51:24.751112\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:24.777084\t------------------------------\n",
      "2018-07-14 15:51:24.778084\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:24.778084\t开始回测\n",
      "2018-07-14 15:51:24.778084\t策略初始化\n",
      "2018-07-14 15:51:24.778084\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:51:24.906953\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:24.920938\t策略初始化完成\n",
      "2018-07-14 15:51:24.920938\t策略启动完成\n",
      "2018-07-14 15:51:24.920938\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:51:24.920938\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:51:31.109620\t载入完成，数据量：73168\n",
      "2018-07-14 15:51:31.110618\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:51:32.106600\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:32.106600\t计算按日统计结果\n",
      "2018-07-14 15:51:32.142563\t------------------------------\n",
      "2018-07-14 15:51:32.143563\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:32.143563\t开始回测\n",
      "2018-07-14 15:51:32.143563\t策略初始化\n",
      "2018-07-14 15:51:32.143563\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:51:32.258447\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:32.271432\t策略初始化完成\n",
      "2018-07-14 15:51:32.271432\t策略启动完成\n",
      "2018-07-14 15:51:32.271432\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:51:32.271432\t载入历史数据。数据范围:[20180302,20180422)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:51:38.617954\t载入完成，数据量：73168\n",
      "2018-07-14 15:51:38.618952\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:51:39.638909\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:39.638909\t计算按日统计结果\n",
      "2018-07-14 15:51:39.674873\t------------------------------\n",
      "2018-07-14 15:51:39.674873\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:39.674873\t开始回测\n",
      "2018-07-14 15:51:39.674873\t策略初始化\n",
      "2018-07-14 15:51:39.675872\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:51:39.809736\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:39.824721\t策略初始化完成\n",
      "2018-07-14 15:51:39.824721\t策略启动完成\n",
      "2018-07-14 15:51:39.824721\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:51:39.825720\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:51:45.907510\t载入完成，数据量：73168\n",
      "2018-07-14 15:51:45.907510\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:51:46.980414\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:46.981413\t计算按日统计结果\n",
      "2018-07-14 15:51:47.017377\t------------------------------\n",
      "2018-07-14 15:51:47.017377\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:47.017377\t开始回测\n",
      "2018-07-14 15:51:47.017377\t策略初始化\n",
      "2018-07-14 15:51:47.017377\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:51:47.136256\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:47.150241\t策略初始化完成\n",
      "2018-07-14 15:51:47.150241\t策略启动完成\n",
      "2018-07-14 15:51:47.150241\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:51:47.150241\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:51:53.287975\t载入完成，数据量：73168\n",
      "2018-07-14 15:51:53.288974\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:51:54.322918\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:51:54.322918\t计算按日统计结果\n",
      "2018-07-14 15:51:54.358883\t------------------------------\n",
      "2018-07-14 15:51:54.358883\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:51:54.358883\t开始回测\n",
      "2018-07-14 15:51:54.358883\t策略初始化\n",
      "2018-07-14 15:51:54.358883\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:51:54.479759\t载入完成，数据量：1440\n",
      "2018-07-14 15:51:54.492746\t策略初始化完成\n",
      "2018-07-14 15:51:54.492746\t策略启动完成\n",
      "2018-07-14 15:51:54.492746\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:51:54.493744\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:00.753352\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:00.754352\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:01.704381\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:01.704381\t计算按日统计结果\n",
      "2018-07-14 15:52:01.740345\t------------------------------\n",
      "2018-07-14 15:52:01.741344\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:01.741344\t开始回测\n",
      "2018-07-14 15:52:01.741344\t策略初始化\n",
      "2018-07-14 15:52:01.741344\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:01.868215\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:01.882201\t策略初始化完成\n",
      "2018-07-14 15:52:01.882201\t策略启动完成\n",
      "2018-07-14 15:52:01.883201\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:01.883201\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:08.024931\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:08.024931\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:09.077853\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:09.077853\t计算按日统计结果\n",
      "2018-07-14 15:52:09.113816\t------------------------------\n",
      "2018-07-14 15:52:09.113816\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:09.113816\t开始回测\n",
      "2018-07-14 15:52:09.113816\t策略初始化\n",
      "2018-07-14 15:52:09.113816\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:09.250677\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:09.262664\t策略初始化完成\n",
      "2018-07-14 15:52:09.263663\t策略启动完成\n",
      "2018-07-14 15:52:09.263663\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:09.263663\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:15.430368\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:15.431369\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:16.495281\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:16.495281\t计算按日统计结果\n",
      "2018-07-14 15:52:16.530244\t------------------------------\n",
      "2018-07-14 15:52:16.531244\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:16.531244\t开始回测\n",
      "2018-07-14 15:52:16.531244\t策略初始化\n",
      "2018-07-14 15:52:16.532242\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:16.651122\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:16.663110\t策略初始化完成\n",
      "2018-07-14 15:52:16.663110\t策略启动完成\n",
      "2018-07-14 15:52:16.663110\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:16.663110\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:23.170465\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:23.170465\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:24.211402\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:24.211402\t计算按日统计结果\n",
      "2018-07-14 15:52:24.247365\t------------------------------\n",
      "2018-07-14 15:52:24.248365\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:24.248365\t开始回测\n",
      "2018-07-14 15:52:24.248365\t策略初始化\n",
      "2018-07-14 15:52:24.248365\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:24.363248\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:24.376235\t策略初始化完成\n",
      "2018-07-14 15:52:24.376235\t策略启动完成\n",
      "2018-07-14 15:52:24.376235\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:24.376235\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:30.808667\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:30.809666\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:31.870582\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:31.870582\t计算按日统计结果\n",
      "2018-07-14 15:52:31.906545\t------------------------------\n",
      "2018-07-14 15:52:31.906545\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:31.906545\t开始回测\n",
      "2018-07-14 15:52:31.906545\t策略初始化\n",
      "2018-07-14 15:52:31.906545\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:32.022431\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:32.035417\t策略初始化完成\n",
      "2018-07-14 15:52:32.035417\t策略启动完成\n",
      "2018-07-14 15:52:32.035417\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:32.036417\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:38.607705\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:38.607705\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:39.586704\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:39.586704\t计算按日统计结果\n",
      "2018-07-14 15:52:39.631658\t------------------------------\n",
      "2018-07-14 15:52:39.631658\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:39.631658\t开始回测\n",
      "2018-07-14 15:52:39.631658\t策略初始化\n",
      "2018-07-14 15:52:39.631658\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:39.750538\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:39.762526\t策略初始化完成\n",
      "2018-07-14 15:52:39.763525\t策略启动完成\n",
      "2018-07-14 15:52:39.763525\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:39.763525\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:45.947211\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:45.947211\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:46.982153\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:46.982153\t计算按日统计结果\n",
      "2018-07-14 15:52:47.021114\t------------------------------\n",
      "2018-07-14 15:52:47.021114\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:52:47.022113\t开始回测\n",
      "2018-07-14 15:52:47.022113\t策略初始化\n",
      "2018-07-14 15:52:47.022113\t载入历史数据。数据范围:[20180301,20180302)\n",
      "2018-07-14 15:52:47.137995\t载入完成，数据量：1440\n",
      "2018-07-14 15:52:47.152981\t策略初始化完成\n",
      "2018-07-14 15:52:47.152981\t策略启动完成\n",
      "2018-07-14 15:52:47.152981\t开始回放回测数据,回测范围:[20180302,20180422)\n",
      "2018-07-14 15:52:47.152981\t载入历史数据。数据范围:[20180302,20180422)\n",
      "2018-07-14 15:52:53.549450\t载入完成，数据量：73168\n",
      "2018-07-14 15:52:53.549450\t当前回放数据:[20180302,20180422)\n",
      "2018-07-14 15:52:54.586391\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:52:54.586391\t计算按日统计结果\n",
      "2018-07-14 15:52:54.600376\t------------------------------\n",
      "2018-07-14 15:52:54.600376\t优化结果：\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：3411.546530570423\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2643.3954000000044\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2580.7762\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1929.1417999999999\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1833.7449999999983\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1488.8096668178841\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1013.0811999999992\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：739.0508000000007\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：350.69900000000194\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：348.8437880328178\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-503.43163999999683\n",
      "2018-07-14 15:52:54.601375\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-865.5785999999953\n",
      "耗时：89.85026240348816\n",
      "2018-07-14 15:52:54.602373\t开始回测\n",
      "2018-07-14 15:52:54.602373\t策略初始化\n",
      "2018-07-14 15:52:54.602373\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:52:54.716258\t载入完成，数据量：1281\n",
      "2018-07-14 15:52:54.728245\t策略初始化完成\n",
      "2018-07-14 15:52:54.728245\t策略启动完成\n",
      "2018-07-14 15:52:54.728245\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:52:54.728245\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:01.237600\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:01.238599\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:02.337476\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:02.358455\t------------------------------\n",
      "2018-07-14 15:53:02.358455\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:02.359454\t开始回测\n",
      "2018-07-14 15:53:02.359454\t策略初始化\n",
      "2018-07-14 15:53:02.359454\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:02.467344\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:02.478333\t策略初始化完成\n",
      "2018-07-14 15:53:02.479332\t策略启动完成\n",
      "2018-07-14 15:53:02.479332\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:02.479332\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:08.728951\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:08.729951\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:09.703955\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:09.703955\t计算按日统计结果\n",
      "2018-07-14 15:53:09.739918\t------------------------------\n",
      "2018-07-14 15:53:09.739918\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:09.739918\t开始回测\n",
      "2018-07-14 15:53:09.739918\t策略初始化\n",
      "2018-07-14 15:53:09.739918\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:09.852804\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:09.864793\t策略初始化完成\n",
      "2018-07-14 15:53:09.864793\t策略启动完成\n",
      "2018-07-14 15:53:09.864793\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:09.864793\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:16.133391\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:16.133391\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:17.143360\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:17.143360\t计算按日统计结果\n",
      "2018-07-14 15:53:17.180322\t------------------------------\n",
      "2018-07-14 15:53:17.180322\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:17.180322\t开始回测\n",
      "2018-07-14 15:53:17.180322\t策略初始化\n",
      "2018-07-14 15:53:17.180322\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:17.294206\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:17.306194\t策略初始化完成\n",
      "2018-07-14 15:53:17.306194\t策略启动完成\n",
      "2018-07-14 15:53:17.306194\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:17.307193\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:23.662707\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:23.662707\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:24.854487\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:24.854487\t计算按日统计结果\n",
      "2018-07-14 15:53:24.891449\t------------------------------\n",
      "2018-07-14 15:53:24.891449\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:24.891449\t开始回测\n",
      "2018-07-14 15:53:24.891449\t策略初始化\n",
      "2018-07-14 15:53:24.891449\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:25.014325\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:25.029309\t策略初始化完成\n",
      "2018-07-14 15:53:25.029309\t策略启动完成\n",
      "2018-07-14 15:53:25.029309\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:25.030308\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:31.276931\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:31.276931\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:32.300884\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:32.300884\t计算按日统计结果\n",
      "2018-07-14 15:53:32.344839\t------------------------------\n",
      "2018-07-14 15:53:32.344839\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:32.344839\t开始回测\n",
      "2018-07-14 15:53:32.344839\t策略初始化\n",
      "2018-07-14 15:53:32.344839\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:32.468713\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:32.480701\t策略初始化完成\n",
      "2018-07-14 15:53:32.480701\t策略启动完成\n",
      "2018-07-14 15:53:32.480701\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:32.481700\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:38.589464\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:38.590464\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:39.575457\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:39.575457\t计算按日统计结果\n",
      "2018-07-14 15:53:39.612419\t------------------------------\n",
      "2018-07-14 15:53:39.612419\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:39.612419\t开始回测\n",
      "2018-07-14 15:53:39.612419\t策略初始化\n",
      "2018-07-14 15:53:39.612419\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:39.720310\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:39.730300\t策略初始化完成\n",
      "2018-07-14 15:53:39.732298\t策略启动完成\n",
      "2018-07-14 15:53:39.732298\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:39.732298\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:46.227666\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:46.228665\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:47.153719\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:47.154719\t计算按日统计结果\n",
      "2018-07-14 15:53:47.191681\t------------------------------\n",
      "2018-07-14 15:53:47.192680\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:47.192680\t开始回测\n",
      "2018-07-14 15:53:47.192680\t策略初始化\n",
      "2018-07-14 15:53:47.192680\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:47.299571\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:47.311559\t策略初始化完成\n",
      "2018-07-14 15:53:47.311559\t策略启动完成\n",
      "2018-07-14 15:53:47.311559\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:47.311559\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:53:53.582156\t载入完成，数据量：73321\n",
      "2018-07-14 15:53:53.582156\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:53:54.516203\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:53:54.516203\t计算按日统计结果\n",
      "2018-07-14 15:53:54.552166\t------------------------------\n",
      "2018-07-14 15:53:54.552166\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:53:54.552166\t开始回测\n",
      "2018-07-14 15:53:54.552166\t策略初始化\n",
      "2018-07-14 15:53:54.552166\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:53:54.663053\t载入完成，数据量：1281\n",
      "2018-07-14 15:53:54.674042\t策略初始化完成\n",
      "2018-07-14 15:53:54.675040\t策略启动完成\n",
      "2018-07-14 15:53:54.675040\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:53:54.675040\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:54:00.938646\t载入完成，数据量：73321\n",
      "2018-07-14 15:54:00.938646\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:54:01.869695\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:01.869695\t计算按日统计结果\n",
      "2018-07-14 15:54:01.904660\t------------------------------\n",
      "2018-07-14 15:54:01.904660\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:01.904660\t开始回测\n",
      "2018-07-14 15:54:01.904660\t策略初始化\n",
      "2018-07-14 15:54:01.904660\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:54:02.019542\t载入完成，数据量：1281\n",
      "2018-07-14 15:54:02.030532\t策略初始化完成\n",
      "2018-07-14 15:54:02.030532\t策略启动完成\n",
      "2018-07-14 15:54:02.030532\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:54:02.031530\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:54:08.437989\t载入完成，数据量：73321\n",
      "2018-07-14 15:54:08.438990\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:54:09.424982\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:09.424982\t计算按日统计结果\n",
      "2018-07-14 15:54:09.461943\t------------------------------\n",
      "2018-07-14 15:54:09.461943\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:09.461943\t开始回测\n",
      "2018-07-14 15:54:09.461943\t策略初始化\n",
      "2018-07-14 15:54:09.461943\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:54:09.587815\t载入完成，数据量：1281\n",
      "2018-07-14 15:54:09.600802\t策略初始化完成\n",
      "2018-07-14 15:54:09.600802\t策略启动完成\n",
      "2018-07-14 15:54:09.600802\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:54:09.600802\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:54:15.635640\t载入完成，数据量：73321\n",
      "2018-07-14 15:54:15.635640\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:54:16.623631\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:16.623631\t计算按日统计结果\n",
      "2018-07-14 15:54:16.660593\t------------------------------\n",
      "2018-07-14 15:54:16.660593\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:16.660593\t开始回测\n",
      "2018-07-14 15:54:16.660593\t策略初始化\n",
      "2018-07-14 15:54:16.660593\t载入历史数据。数据范围:[20180321,20180322)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:54:16.792459\t载入完成，数据量：1281\n",
      "2018-07-14 15:54:16.803449\t策略初始化完成\n",
      "2018-07-14 15:54:16.803449\t策略启动完成\n",
      "2018-07-14 15:54:16.803449\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:54:16.803449\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:54:23.008113\t载入完成，数据量：73321\n",
      "2018-07-14 15:54:23.009112\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:54:24.010090\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:24.011089\t计算按日统计结果\n",
      "2018-07-14 15:54:24.046053\t------------------------------\n",
      "2018-07-14 15:54:24.046053\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:24.047052\t开始回测\n",
      "2018-07-14 15:54:24.047052\t策略初始化\n",
      "2018-07-14 15:54:24.047052\t载入历史数据。数据范围:[20180321,20180322)\n",
      "2018-07-14 15:54:24.151945\t载入完成，数据量：1281\n",
      "2018-07-14 15:54:24.162935\t策略初始化完成\n",
      "2018-07-14 15:54:24.162935\t策略启动完成\n",
      "2018-07-14 15:54:24.162935\t开始回放回测数据,回测范围:[20180322,20180512)\n",
      "2018-07-14 15:54:24.162935\t载入历史数据。数据范围:[20180322,20180512)\n",
      "2018-07-14 15:54:30.343625\t载入完成，数据量：73321\n",
      "2018-07-14 15:54:30.343625\t当前回放数据:[20180322,20180512)\n",
      "2018-07-14 15:54:31.300647\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:31.300647\t计算按日统计结果\n",
      "2018-07-14 15:54:31.313634\t------------------------------\n",
      "2018-07-14 15:54:31.314633\t优化结果：\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2264.0622999999996\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1786.5273999999986\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1533.1108000000008\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1419.8643937636623\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1291.3169999999996\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1143.0916400000017\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1047.0134000000048\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：945.2895000000001\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：853.7002000000035\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：732.0298603399417\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：627.3010999999982\n",
      "2018-07-14 15:54:31.314633\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：79.96235122606967\n",
      "耗时：88.9771568775177\n",
      "2018-07-14 15:54:31.315631\t开始回测\n",
      "2018-07-14 15:54:31.315631\t策略初始化\n",
      "2018-07-14 15:54:31.315631\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:54:31.445499\t载入完成，数据量：1439\n",
      "2018-07-14 15:54:31.461483\t策略初始化完成\n",
      "2018-07-14 15:54:31.461483\t策略启动完成\n",
      "2018-07-14 15:54:31.461483\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:54:31.461483\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:54:37.947860\t载入完成，数据量：73231\n",
      "2018-07-14 15:54:37.947860\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:54:38.972813\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:38.994791\t------------------------------\n",
      "2018-07-14 15:54:38.994791\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:38.994791\t开始回测\n",
      "2018-07-14 15:54:38.994791\t策略初始化\n",
      "2018-07-14 15:54:38.994791\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:54:39.110673\t载入完成，数据量：1439\n",
      "2018-07-14 15:54:39.123661\t策略初始化完成\n",
      "2018-07-14 15:54:39.123661\t策略启动完成\n",
      "2018-07-14 15:54:39.123661\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:54:39.123661\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:54:45.357296\t载入完成，数据量：73231\n",
      "2018-07-14 15:54:45.357296\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:54:46.303329\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:46.303329\t计算按日统计结果\n",
      "2018-07-14 15:54:46.340292\t------------------------------\n",
      "2018-07-14 15:54:46.340292\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:46.340292\t开始回测\n",
      "2018-07-14 15:54:46.340292\t策略初始化\n",
      "2018-07-14 15:54:46.340292\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:54:46.458172\t载入完成，数据量：1439\n",
      "2018-07-14 15:54:46.472159\t策略初始化完成\n",
      "2018-07-14 15:54:46.472159\t策略启动完成\n",
      "2018-07-14 15:54:46.472159\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:54:46.473156\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:54:52.548953\t载入完成，数据量：73231\n",
      "2018-07-14 15:54:52.548953\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:54:53.504977\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:54:53.504977\t计算按日统计结果\n",
      "2018-07-14 15:54:53.539941\t------------------------------\n",
      "2018-07-14 15:54:53.539941\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:54:53.539941\t开始回测\n",
      "2018-07-14 15:54:53.539941\t策略初始化\n",
      "2018-07-14 15:54:53.539941\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:54:53.661818\t载入完成，数据量：1439\n",
      "2018-07-14 15:54:53.675802\t策略初始化完成\n",
      "2018-07-14 15:54:53.675802\t策略启动完成\n",
      "2018-07-14 15:54:53.675802\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:54:53.675802\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:54:59.925421\t载入完成，数据量：73231\n",
      "2018-07-14 15:54:59.926420\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:00.924402\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:00.924402\t计算按日统计结果\n",
      "2018-07-14 15:55:00.960365\t------------------------------\n",
      "2018-07-14 15:55:00.960365\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:00.960365\t开始回测\n",
      "2018-07-14 15:55:00.960365\t策略初始化\n",
      "2018-07-14 15:55:00.960365\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:01.083241\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:01.096227\t策略初始化完成\n",
      "2018-07-14 15:55:01.096227\t策略启动完成\n",
      "2018-07-14 15:55:01.097226\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:01.097226\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:07.862319\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:07.863320\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:08.872287\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:08.872287\t计算按日统计结果\n",
      "2018-07-14 15:55:08.920238\t------------------------------\n",
      "2018-07-14 15:55:08.920238\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:08.920238\t开始回测\n",
      "2018-07-14 15:55:08.920238\t策略初始化\n",
      "2018-07-14 15:55:08.920238\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:09.049106\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:09.061094\t策略初始化完成\n",
      "2018-07-14 15:55:09.061094\t策略启动完成\n",
      "2018-07-14 15:55:09.061094\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:09.061094\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:16.132874\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:16.133873\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:17.133852\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:17.133852\t计算按日统计结果\n",
      "2018-07-14 15:55:17.171813\t------------------------------\n",
      "2018-07-14 15:55:17.171813\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:17.171813\t开始回测\n",
      "2018-07-14 15:55:17.171813\t策略初始化\n",
      "2018-07-14 15:55:17.171813\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:17.296686\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:17.309672\t策略初始化完成\n",
      "2018-07-14 15:55:17.309672\t策略启动完成\n",
      "2018-07-14 15:55:17.309672\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:17.309672\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:23.838007\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:23.838007\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:24.767058\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:24.767058\t计算按日统计结果\n",
      "2018-07-14 15:55:24.804020\t------------------------------\n",
      "2018-07-14 15:55:24.804020\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:24.804020\t开始回测\n",
      "2018-07-14 15:55:24.804020\t策略初始化\n",
      "2018-07-14 15:55:24.804020\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:24.919903\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:24.932890\t策略初始化完成\n",
      "2018-07-14 15:55:24.933889\t策略启动完成\n",
      "2018-07-14 15:55:24.933889\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:24.933889\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:31.144548\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:31.144548\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:32.106565\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:32.106565\t计算按日统计结果\n",
      "2018-07-14 15:55:32.142529\t------------------------------\n",
      "2018-07-14 15:55:32.142529\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:32.142529\t开始回测\n",
      "2018-07-14 15:55:32.142529\t策略初始化\n",
      "2018-07-14 15:55:32.142529\t载入历史数据。数据范围:[20180410,20180411)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:55:32.274395\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:32.288381\t策略初始化完成\n",
      "2018-07-14 15:55:32.288381\t策略启动完成\n",
      "2018-07-14 15:55:32.288381\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:32.288381\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:38.598701\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:38.599702\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:39.817456\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:39.817456\t计算按日统计结果\n",
      "2018-07-14 15:55:39.853419\t------------------------------\n",
      "2018-07-14 15:55:39.853419\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:39.853419\t开始回测\n",
      "2018-07-14 15:55:39.853419\t策略初始化\n",
      "2018-07-14 15:55:39.854418\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:39.975297\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:39.987284\t策略初始化完成\n",
      "2018-07-14 15:55:39.988284\t策略启动完成\n",
      "2018-07-14 15:55:39.988284\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:39.988284\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:46.123019\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:46.123019\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:47.142978\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:47.142978\t计算按日统计结果\n",
      "2018-07-14 15:55:47.178941\t------------------------------\n",
      "2018-07-14 15:55:47.178941\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:47.178941\t开始回测\n",
      "2018-07-14 15:55:47.178941\t策略初始化\n",
      "2018-07-14 15:55:47.178941\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:47.314802\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:47.326789\t策略初始化完成\n",
      "2018-07-14 15:55:47.326789\t策略启动完成\n",
      "2018-07-14 15:55:47.326789\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:47.327788\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:55:53.735247\t载入完成，数据量：73231\n",
      "2018-07-14 15:55:53.735247\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:55:54.723237\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:55:54.723237\t计算按日统计结果\n",
      "2018-07-14 15:55:54.759201\t------------------------------\n",
      "2018-07-14 15:55:54.759201\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:55:54.759201\t开始回测\n",
      "2018-07-14 15:55:54.759201\t策略初始化\n",
      "2018-07-14 15:55:54.760201\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:55:54.875084\t载入完成，数据量：1439\n",
      "2018-07-14 15:55:54.888070\t策略初始化完成\n",
      "2018-07-14 15:55:54.889069\t策略启动完成\n",
      "2018-07-14 15:55:54.889069\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:55:54.889069\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:56:01.140687\t载入完成，数据量：73231\n",
      "2018-07-14 15:56:01.141687\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:56:02.108698\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:02.108698\t计算按日统计结果\n",
      "2018-07-14 15:56:02.144661\t------------------------------\n",
      "2018-07-14 15:56:02.145660\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:02.145660\t开始回测\n",
      "2018-07-14 15:56:02.145660\t策略初始化\n",
      "2018-07-14 15:56:02.145660\t载入历史数据。数据范围:[20180410,20180411)\n",
      "2018-07-14 15:56:02.261543\t载入完成，数据量：1439\n",
      "2018-07-14 15:56:02.274529\t策略初始化完成\n",
      "2018-07-14 15:56:02.274529\t策略启动完成\n",
      "2018-07-14 15:56:02.274529\t开始回放回测数据,回测范围:[20180411,20180601)\n",
      "2018-07-14 15:56:02.274529\t载入历史数据。数据范围:[20180411,20180601)\n",
      "2018-07-14 15:56:08.466207\t载入完成，数据量：73231\n",
      "2018-07-14 15:56:08.466207\t当前回放数据:[20180411,20180601)\n",
      "2018-07-14 15:56:09.515136\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:09.515136\t计算按日统计结果\n",
      "2018-07-14 15:56:09.530121\t------------------------------\n",
      "2018-07-14 15:56:09.530121\t优化结果：\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：2410.912300000003\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1450.933399999998\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1127.2759\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1120.8965000000057\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：780.6947000000018\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：599.7958000000006\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：525.2898512260697\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：400.6426000000033\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-41.86943966005498\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-128.05430000000064\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-170.6120999999979\n",
      "2018-07-14 15:56:09.530121\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-415.15134877393575\n",
      "耗时：90.55730748176575\n",
      "2018-07-14 15:56:09.532118\t开始回测\n",
      "2018-07-14 15:56:09.532118\t策略初始化\n",
      "2018-07-14 15:56:09.532118\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:56:09.659989\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:09.671976\t策略初始化完成\n",
      "2018-07-14 15:56:09.671976\t策略启动完成\n",
      "2018-07-14 15:56:09.671976\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:09.671976\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:56:15.960555\t载入完成，数据量：72987\n",
      "2018-07-14 15:56:15.960555\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:56:16.965529\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:16.991502\t------------------------------\n",
      "2018-07-14 15:56:16.991502\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:16.991502\t开始回测\n",
      "2018-07-14 15:56:16.991502\t策略初始化\n",
      "2018-07-14 15:56:16.991502\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:56:17.155336\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:17.168322\t策略初始化完成\n",
      "2018-07-14 15:56:17.169322\t策略启动完成\n",
      "2018-07-14 15:56:17.169322\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:17.169322\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:56:23.568788\t载入完成，数据量：72987\n",
      "2018-07-14 15:56:23.568788\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:56:24.496840\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:24.496840\t计算按日统计结果\n",
      "2018-07-14 15:56:24.532803\t------------------------------\n",
      "2018-07-14 15:56:24.533802\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:24.533802\t开始回测\n",
      "2018-07-14 15:56:24.533802\t策略初始化\n",
      "2018-07-14 15:56:24.533802\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:56:24.649685\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:24.663671\t策略初始化完成\n",
      "2018-07-14 15:56:24.663671\t策略启动完成\n",
      "2018-07-14 15:56:24.663671\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:24.663671\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:56:30.871332\t载入完成，数据量：72987\n",
      "2018-07-14 15:56:30.871332\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:56:31.853329\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:31.853329\t计算按日统计结果\n",
      "2018-07-14 15:56:31.889293\t------------------------------\n",
      "2018-07-14 15:56:31.889293\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:31.889293\t开始回测\n",
      "2018-07-14 15:56:31.889293\t策略初始化\n",
      "2018-07-14 15:56:31.889293\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:56:32.022157\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:32.035145\t策略初始化完成\n",
      "2018-07-14 15:56:32.036144\t策略启动完成\n",
      "2018-07-14 15:56:32.036144\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:32.036144\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:56:38.270777\t载入完成，数据量：72987\n",
      "2018-07-14 15:56:38.270777\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:56:39.295731\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:39.295731\t计算按日统计结果\n",
      "2018-07-14 15:56:39.332693\t------------------------------\n",
      "2018-07-14 15:56:39.332693\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:39.332693\t开始回测\n",
      "2018-07-14 15:56:39.332693\t策略初始化\n",
      "2018-07-14 15:56:39.332693\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:56:39.453570\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:39.467557\t策略初始化完成\n",
      "2018-07-14 15:56:39.467557\t策略启动完成\n",
      "2018-07-14 15:56:39.467557\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:39.467557\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:56:45.641252\t载入完成，数据量：72987\n",
      "2018-07-14 15:56:45.642253\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:56:46.645227\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:46.645227\t计算按日统计结果\n",
      "2018-07-14 15:56:46.681190\t------------------------------\n",
      "2018-07-14 15:56:46.681190\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:46.681190\t开始回测\n",
      "2018-07-14 15:56:46.682189\t策略初始化\n",
      "2018-07-14 15:56:46.682189\t载入历史数据。数据范围:[20180430,20180501)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:56:46.819049\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:46.830037\t策略初始化完成\n",
      "2018-07-14 15:56:46.831037\t策略启动完成\n",
      "2018-07-14 15:56:46.831037\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:46.831037\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:56:53.191543\t载入完成，数据量：72987\n",
      "2018-07-14 15:56:53.191543\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:56:54.210503\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:56:54.210503\t计算按日统计结果\n",
      "2018-07-14 15:56:54.260451\t------------------------------\n",
      "2018-07-14 15:56:54.260451\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:56:54.260451\t开始回测\n",
      "2018-07-14 15:56:54.261451\t策略初始化\n",
      "2018-07-14 15:56:54.261451\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:56:54.382327\t载入完成，数据量：1440\n",
      "2018-07-14 15:56:54.395315\t策略初始化完成\n",
      "2018-07-14 15:56:54.395315\t策略启动完成\n",
      "2018-07-14 15:56:54.395315\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:56:54.395315\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:00.806769\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:00.807769\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:01.780774\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:01.780774\t计算按日统计结果\n",
      "2018-07-14 15:57:01.817736\t------------------------------\n",
      "2018-07-14 15:57:01.818735\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:01.818735\t开始回测\n",
      "2018-07-14 15:57:01.818735\t策略初始化\n",
      "2018-07-14 15:57:01.818735\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:57:01.951599\t载入完成，数据量：1440\n",
      "2018-07-14 15:57:01.963587\t策略初始化完成\n",
      "2018-07-14 15:57:01.964586\t策略启动完成\n",
      "2018-07-14 15:57:01.964586\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:57:01.964586\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:08.306111\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:08.307111\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:09.355041\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:09.355041\t计算按日统计结果\n",
      "2018-07-14 15:57:09.392003\t------------------------------\n",
      "2018-07-14 15:57:09.392003\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:09.392003\t开始回测\n",
      "2018-07-14 15:57:09.392003\t策略初始化\n",
      "2018-07-14 15:57:09.392003\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:57:09.511881\t载入完成，数据量：1440\n",
      "2018-07-14 15:57:09.524869\t策略初始化完成\n",
      "2018-07-14 15:57:09.524869\t策略启动完成\n",
      "2018-07-14 15:57:09.524869\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:57:09.524869\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:15.778482\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:15.778482\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:16.759480\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:16.759480\t计算按日统计结果\n",
      "2018-07-14 15:57:16.796444\t------------------------------\n",
      "2018-07-14 15:57:16.796444\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:16.796444\t开始回测\n",
      "2018-07-14 15:57:16.796444\t策略初始化\n",
      "2018-07-14 15:57:16.796444\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:57:16.922316\t载入完成，数据量：1440\n",
      "2018-07-14 15:57:16.935302\t策略初始化完成\n",
      "2018-07-14 15:57:16.935302\t策略启动完成\n",
      "2018-07-14 15:57:16.935302\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:57:16.935302\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:22.920191\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:22.920191\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:23.893197\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:23.893197\t计算按日统计结果\n",
      "2018-07-14 15:57:23.930160\t------------------------------\n",
      "2018-07-14 15:57:23.930160\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:23.930160\t开始回测\n",
      "2018-07-14 15:57:23.930160\t策略初始化\n",
      "2018-07-14 15:57:23.930160\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:57:24.062025\t载入完成，数据量：1440\n",
      "2018-07-14 15:57:24.075012\t策略初始化完成\n",
      "2018-07-14 15:57:24.075012\t策略启动完成\n",
      "2018-07-14 15:57:24.075012\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:57:24.075012\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:30.297659\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:30.298659\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:31.268667\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:31.268667\t计算按日统计结果\n",
      "2018-07-14 15:57:31.304631\t------------------------------\n",
      "2018-07-14 15:57:31.304631\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:31.304631\t开始回测\n",
      "2018-07-14 15:57:31.304631\t策略初始化\n",
      "2018-07-14 15:57:31.304631\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:57:31.438494\t载入完成，数据量：1440\n",
      "2018-07-14 15:57:31.452480\t策略初始化完成\n",
      "2018-07-14 15:57:31.452480\t策略启动完成\n",
      "2018-07-14 15:57:31.452480\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:57:31.453480\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:37.543261\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:37.543261\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:38.564219\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:38.564219\t计算按日统计结果\n",
      "2018-07-14 15:57:38.601181\t------------------------------\n",
      "2018-07-14 15:57:38.601181\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:38.601181\t开始回测\n",
      "2018-07-14 15:57:38.601181\t策略初始化\n",
      "2018-07-14 15:57:38.601181\t载入历史数据。数据范围:[20180430,20180501)\n",
      "2018-07-14 15:57:38.719061\t载入完成，数据量：1440\n",
      "2018-07-14 15:57:38.731049\t策略初始化完成\n",
      "2018-07-14 15:57:38.731049\t策略启动完成\n",
      "2018-07-14 15:57:38.731049\t开始回放回测数据,回测范围:[20180501,20180621)\n",
      "2018-07-14 15:57:38.732048\t载入历史数据。数据范围:[20180501,20180621)\n",
      "2018-07-14 15:57:44.630025\t载入完成，数据量：72987\n",
      "2018-07-14 15:57:44.630025\t当前回放数据:[20180501,20180621)\n",
      "2018-07-14 15:57:45.611024\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:45.611024\t计算按日统计结果\n",
      "2018-07-14 15:57:45.626008\t------------------------------\n",
      "2018-07-14 15:57:45.626008\t优化结果：\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1768.9942000000037\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：852.6940999999986\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：809.2608000000025\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：749.6081000000045\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：745.3322362799668\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：485.1701\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：242.31205122606684\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：154.0127000000048\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：148.13150000000218\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：97.8899000000045\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：37.891343387425025\n",
      "2018-07-14 15:57:45.626008\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-28.103911378570558\n",
      "耗时：88.66047859191895\n",
      "2018-07-14 15:57:45.627008\t开始回测\n",
      "2018-07-14 15:57:45.627008\t策略初始化\n",
      "2018-07-14 15:57:45.627008\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:57:45.744889\t载入完成，数据量：1425\n",
      "2018-07-14 15:57:45.762869\t策略初始化完成\n",
      "2018-07-14 15:57:45.762869\t策略启动完成\n",
      "2018-07-14 15:57:45.762869\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:57:45.762869\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:57:51.037484\t载入完成，数据量：58507\n",
      "2018-07-14 15:57:51.037484\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:57:51.819685\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:51.836667\t------------------------------\n",
      "2018-07-14 15:57:51.836667\tsetting: {'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:51.836667\t开始回测\n",
      "2018-07-14 15:57:51.836667\t策略初始化\n",
      "2018-07-14 15:57:51.836667\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:57:51.960543\t载入完成，数据量：1425\n",
      "2018-07-14 15:57:51.973528\t策略初始化完成\n",
      "2018-07-14 15:57:51.973528\t策略启动完成\n",
      "2018-07-14 15:57:51.973528\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:57:51.973528\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:57:56.895503\t载入完成，数据量：58507\n",
      "2018-07-14 15:57:56.896502\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:57:57.678703\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:57:57.678703\t计算按日统计结果\n",
      "2018-07-14 15:57:57.709671\t------------------------------\n",
      "2018-07-14 15:57:57.710670\tsetting: {'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:57:57.710670\t开始回测\n",
      "2018-07-14 15:57:57.710670\t策略初始化\n",
      "2018-07-14 15:57:57.710670\t载入历史数据。数据范围:[20180520,20180521)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 15:57:57.827553\t载入完成，数据量：1425\n",
      "2018-07-14 15:57:57.839539\t策略初始化完成\n",
      "2018-07-14 15:57:57.839539\t策略启动完成\n",
      "2018-07-14 15:57:57.839539\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:57:57.840538\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:02.720556\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:02.721555\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:03.562695\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:03.563694\t计算按日统计结果\n",
      "2018-07-14 15:58:03.595664\t------------------------------\n",
      "2018-07-14 15:58:03.595664\tsetting: {'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:03.595664\t开始回测\n",
      "2018-07-14 15:58:03.595664\t策略初始化\n",
      "2018-07-14 15:58:03.595664\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:03.725530\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:03.737518\t策略初始化完成\n",
      "2018-07-14 15:58:03.737518\t策略启动完成\n",
      "2018-07-14 15:58:03.737518\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:03.737518\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:08.878269\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:08.878269\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:09.829297\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:09.829297\t计算按日统计结果\n",
      "2018-07-14 15:58:09.865260\t------------------------------\n",
      "2018-07-14 15:58:09.865260\tsetting: {'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:09.865260\t开始回测\n",
      "2018-07-14 15:58:09.865260\t策略初始化\n",
      "2018-07-14 15:58:09.865260\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:09.999124\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:10.013110\t策略初始化完成\n",
      "2018-07-14 15:58:10.013110\t策略启动完成\n",
      "2018-07-14 15:58:10.013110\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:10.013110\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:14.829193\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:14.829193\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:15.667337\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:15.667337\t计算按日统计结果\n",
      "2018-07-14 15:58:15.699304\t------------------------------\n",
      "2018-07-14 15:58:15.699304\tsetting: {'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:15.699304\t开始回测\n",
      "2018-07-14 15:58:15.699304\t策略初始化\n",
      "2018-07-14 15:58:15.699304\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:15.814188\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:15.826175\t策略初始化完成\n",
      "2018-07-14 15:58:15.826175\t策略启动完成\n",
      "2018-07-14 15:58:15.826175\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:15.826175\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:20.550351\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:20.550351\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:21.344541\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:21.344541\t计算按日统计结果\n",
      "2018-07-14 15:58:21.377508\t------------------------------\n",
      "2018-07-14 15:58:21.377508\tsetting: {'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:21.377508\t开始回测\n",
      "2018-07-14 15:58:21.377508\t策略初始化\n",
      "2018-07-14 15:58:21.377508\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:21.497384\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:21.510371\t策略初始化完成\n",
      "2018-07-14 15:58:21.510371\t策略启动完成\n",
      "2018-07-14 15:58:21.510371\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:21.511370\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:26.427351\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:26.428351\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:27.267493\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:27.268493\t计算按日统计结果\n",
      "2018-07-14 15:58:27.299462\t------------------------------\n",
      "2018-07-14 15:58:27.299462\tsetting: {'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:27.299462\t开始回测\n",
      "2018-07-14 15:58:27.299462\t策略初始化\n",
      "2018-07-14 15:58:27.299462\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:27.438320\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:27.450308\t策略初始化完成\n",
      "2018-07-14 15:58:27.450308\t策略启动完成\n",
      "2018-07-14 15:58:27.450308\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:27.451307\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:32.220437\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:32.220437\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:32.998642\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:32.998642\t计算按日统计结果\n",
      "2018-07-14 15:58:33.029611\t------------------------------\n",
      "2018-07-14 15:58:33.029611\tsetting: {'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:33.030609\t开始回测\n",
      "2018-07-14 15:58:33.030609\t策略初始化\n",
      "2018-07-14 15:58:33.030609\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:33.155482\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:33.168470\t策略初始化完成\n",
      "2018-07-14 15:58:33.168470\t策略启动完成\n",
      "2018-07-14 15:58:33.168470\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:33.168470\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:38.120413\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:38.120413\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:38.924592\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:38.924592\t计算按日统计结果\n",
      "2018-07-14 15:58:38.955560\t------------------------------\n",
      "2018-07-14 15:58:38.955560\tsetting: {'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:38.955560\t开始回测\n",
      "2018-07-14 15:58:38.955560\t策略初始化\n",
      "2018-07-14 15:58:38.956559\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:39.071443\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:39.085428\t策略初始化完成\n",
      "2018-07-14 15:58:39.086427\t策略启动完成\n",
      "2018-07-14 15:58:39.086427\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:39.086427\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:43.988422\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:43.988422\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:44.749644\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:44.749644\t计算按日统计结果\n",
      "2018-07-14 15:58:44.781612\t------------------------------\n",
      "2018-07-14 15:58:44.781612\tsetting: {'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:44.781612\t开始回测\n",
      "2018-07-14 15:58:44.781612\t策略初始化\n",
      "2018-07-14 15:58:44.781612\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:44.921470\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:44.934458\t策略初始化完成\n",
      "2018-07-14 15:58:44.934458\t策略启动完成\n",
      "2018-07-14 15:58:44.934458\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:44.935456\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:50.151131\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:50.152129\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:50.907358\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:50.907358\t计算按日统计结果\n",
      "2018-07-14 15:58:50.938326\t------------------------------\n",
      "2018-07-14 15:58:50.939325\tsetting: {'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:50.939325\t开始回测\n",
      "2018-07-14 15:58:50.939325\t策略初始化\n",
      "2018-07-14 15:58:50.939325\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:51.056205\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:51.067194\t策略初始化完成\n",
      "2018-07-14 15:58:51.068193\t策略启动完成\n",
      "2018-07-14 15:58:51.068193\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:51.068193\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:58:56.195959\t载入完成，数据量：58507\n",
      "2018-07-14 15:58:56.195959\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:58:57.014123\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:58:57.014123\t计算按日统计结果\n",
      "2018-07-14 15:58:57.046090\t------------------------------\n",
      "2018-07-14 15:58:57.046090\tsetting: {'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\n",
      "2018-07-14 15:58:57.046090\t开始回测\n",
      "2018-07-14 15:58:57.046090\t策略初始化\n",
      "2018-07-14 15:58:57.046090\t载入历史数据。数据范围:[20180520,20180521)\n",
      "2018-07-14 15:58:57.202929\t载入完成，数据量：1425\n",
      "2018-07-14 15:58:57.216916\t策略初始化完成\n",
      "2018-07-14 15:58:57.217914\t策略启动完成\n",
      "2018-07-14 15:58:57.217914\t开始回放回测数据,回测范围:[20180521,20180711)\n",
      "2018-07-14 15:58:57.217914\t载入历史数据。数据范围:[20180521,20180711)\n",
      "2018-07-14 15:59:02.439584\t载入完成，数据量：58507\n",
      "2018-07-14 15:59:02.439584\t当前回放数据:[20180521,20180711)\n",
      "2018-07-14 15:59:03.301704\t数据回放结束ss: 100%    \n",
      "2018-07-14 15:59:03.302704\t计算按日统计结果\n",
      "2018-07-14 15:59:03.315689\t------------------------------\n",
      "2018-07-14 15:59:03.315689\t优化结果：\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 40, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1329.3104000000033\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 40, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：1295.8445000000027\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 20, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：521.9461000000047\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 20, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：469.30259999999805\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 40, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：328.0474362799623\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 30, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-53.20329999999831\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 30, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-63.7858599999995\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 20, 'slowWindow': 60, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-141.72269999999776\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 40, 'slowWindow': 80, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-152.42769999999746\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 30, 'slowWindow': 70, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-319.62399999999985\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 20, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-365.9459566125787\n",
      "2018-07-14 15:59:03.315689\t参数：[\"{'fastWindow': 30, 'slowWindow': 50, 'symbolList': ['tBTCUSD:bitfinex']}\"]，目标：-758.189062604635\n",
      "耗时：71.49600410461426\n"
     ]
    }
   ],
   "source": [
    "from datetime import date,timedelta, datetime\n",
    "\n",
    "def step_optimize(startTime, backTestDay, paraDate, stepDate):\n",
    "    #startDate:开始时间为日期, backTestDay: 回测的总天数, paraDate： 用于优化参数的时间长度, stepDate: 用于回测的时间长度\n",
    "    startDate = [str(startTime+timedelta(days=t)).replace('-','') for t in range(0,backTestDay,stepDate)]\n",
    "    endDate = [str(startTime+timedelta(days=t)).replace('-','') for t in range(paraDate, backTestDay+paraDate, stepDate)]\n",
    "    stepParameter = stepParameterDF(startDate, endDate)\n",
    "    return stepParameter\n",
    "\n",
    "stepParameter = step_optimize(date(2018,1,1), 150, 50, 20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>fastWindow</th>\n",
       "      <th>slowWindow</th>\n",
       "      <th>symbolList</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2018-02-20</th>\n",
       "      <td>30</td>\n",
       "      <td>80</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-03-12</th>\n",
       "      <td>40</td>\n",
       "      <td>70</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-04-01</th>\n",
       "      <td>20</td>\n",
       "      <td>80</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-04-21</th>\n",
       "      <td>20</td>\n",
       "      <td>80</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-05-11</th>\n",
       "      <td>20</td>\n",
       "      <td>60</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-05-31</th>\n",
       "      <td>20</td>\n",
       "      <td>50</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-06-20</th>\n",
       "      <td>40</td>\n",
       "      <td>70</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2018-07-10</th>\n",
       "      <td>40</td>\n",
       "      <td>70</td>\n",
       "      <td>[tBTCUSD:bitfinex]</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           fastWindow slowWindow          symbolList\n",
       "2018-02-20         30         80  [tBTCUSD:bitfinex]\n",
       "2018-03-12         40         70  [tBTCUSD:bitfinex]\n",
       "2018-04-01         20         80  [tBTCUSD:bitfinex]\n",
       "2018-04-21         20         80  [tBTCUSD:bitfinex]\n",
       "2018-05-11         20         60  [tBTCUSD:bitfinex]\n",
       "2018-05-31         20         50  [tBTCUSD:bitfinex]\n",
       "2018-06-20         40         70  [tBTCUSD:bitfinex]\n",
       "2018-07-10         40         70  [tBTCUSD:bitfinex]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stepParameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 16:47:53.928949\t开始回测\n",
      "2018-07-14 16:47:53.928949\t策略初始化\n",
      "2018-07-14 16:47:53.928949\t载入历史数据。数据范围:[20180221,20180222)\n",
      "2018-07-14 16:47:54.059816\t载入完成，数据量：1440\n",
      "2018-07-14 16:47:54.091783\t策略初始化完成\n",
      "2018-07-14 16:47:54.092782\t策略启动完成\n",
      "2018-07-14 16:47:54.092782\t开始回放回测数据,回测范围:[20180222,20180701)\n",
      "2018-07-14 16:47:54.092782\t载入历史数据。数据范围:[20180222,20180502)\n",
      "2018-07-14 16:48:02.823868\t载入完成，数据量：99088\n",
      "2018-07-14 16:48:02.823868\t当前回放数据:[20180222,20180502)\n",
      "2018-07-14 16:48:04.819830\t载入历史数据。数据范围:[20180502,20180701)\n",
      "2018-07-14 16:48:12.921558\t载入完成，数据量：85824\n",
      "2018-07-14 16:48:12.950529\t当前回放数据:[20180502,20180701)\n",
      "2018-07-14 16:48:14.596847\t数据回放结束ss: 100%    \n",
      "2018-07-14 16:48:14.596847\t计算按日统计结果\n",
      "2018-07-14 16:48:14.613830\t------------------------------\n",
      "2018-07-14 16:48:14.614829\t首个交易日：\t2018-02-22\n",
      "2018-07-14 16:48:14.614829\t最后交易日：\t2018-06-30\n",
      "2018-07-14 16:48:14.614829\t总交易日：\t129\n",
      "2018-07-14 16:48:14.614829\t盈利交易日\t67\n",
      "2018-07-14 16:48:14.614829\t亏损交易日：\t59\n",
      "2018-07-14 16:48:14.614829\t起始资金：\t1000000\n",
      "2018-07-14 16:48:14.614829\t结束资金：\t1,002,493.11\n",
      "2018-07-14 16:48:14.614829\t总收益率：\t0.25%\n",
      "2018-07-14 16:48:14.614829\t年化收益：\t0.46%\n",
      "2018-07-14 16:48:14.614829\t总盈亏：\t2,493.11\n",
      "2018-07-14 16:48:14.614829\t最大回撤: \t-1,583.56\n",
      "2018-07-14 16:48:14.614829\t百分比最大回撤: -0.16%\n",
      "2018-07-14 16:48:14.614829\t总手续费：\t677.8\n",
      "2018-07-14 16:48:14.614829\t总滑点：\t17.0\n",
      "2018-07-14 16:48:14.614829\t总成交金额：\t677,803.81\n",
      "2018-07-14 16:48:14.614829\t总成交笔数：\t85\n",
      "2018-07-14 16:48:14.614829\t日均盈亏：\t19.33\n",
      "2018-07-14 16:48:14.614829\t日均手续费：\t5.25\n",
      "2018-07-14 16:48:14.614829\t日均滑点：\t0.13\n",
      "2018-07-14 16:48:14.614829\t日均成交金额：\t5,254.29\n",
      "2018-07-14 16:48:14.614829\t日均成交笔数：\t0.66\n",
      "2018-07-14 16:48:14.614829\t日均收益率：\t0.0%\n",
      "2018-07-14 16:48:14.614829\t收益标准差：\t0.03%\n",
      "2018-07-14 16:48:14.614829\tSharpe Ratio：\t0.86\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nh7sphBBCCCFBQYGgB9mpunA3gRBCCCEkqGhomBBCCCEkRlEgSAghhBASoygQJIQQQgiJURQIEkII\nIYTEKAoECSGEEEJiFAWChBBCCCEximFZlg13I4LBaDSGuwmEEEIIIV7Lz88P+XNGbSBICCGEEEK6\nR0PDhBBCCCExigJBQgghhJAYRYEgIYQQQkiMokCQEEIIISRGUSBICCGEEBKjJOFuQCTp6OjA7373\nO1RVVcFsNmP+/Pno378/nnjiCTAMgwEDBmDp0qUQibri57q6OsyaNQsffvgh5HI5mpqasHDhQrS0\ntEAmk+HFF19EUlKS03O0tbXh8ccfx6VLl6BWq7FixQokJCRg//79WLFiBRiGwciRI/H444+7ta+s\nrAzPPvssxGIxioqK8NBDDwEAXnrpJZSWloJhGDz22GMYNWpU1PQZACwWCxYuXIjp06dj3Lhx2LFj\nB9544w0AAMuyMBqN+Oijj9CvX7+o6HN396moqMBDDz2E//73v171NRL6bPPXv/4VP/74I1566SXO\nNrq+zzatra0oKSnBY4895nRc6H3es2cPXn75ZUgkEhgMBqxYsQJKpRLPP/88jEYjRCIRFi9e7FM5\niXD2eevWrVixYgXS0tIAAAsWLEBhYaFbG7ne5xUrVuDAgQPo7OzEzJkzMWPGjKjps6f3+T//+Q/W\nrVsHi8WCn/3sZ3jwwQcF0eeKigosXboUHR0dkMlkWLVqFeLj450e6+latXz5chw4cABqtRqLFi3C\nsGHDoqbPnt7nQK7PIcMSu3//+9/s8uXLWZZl2cuXL7Pjx49nf/3rX7PffPMNy7Is+/TTT7Off/45\ny7Isu2PHDvb2229nR4wYwba1tbEsy7Jvvvkmu2LFCpZlWXbDhg3s888/7/Yc//jHP9i//OUvLMuy\n7EcffcT+8Y9/ZFmWZe+88062srKSZVmWvfvuu9ny8nK3x06dOpWtqKhgrVYre//997Pl5eVseXk5\ne88997BWq5U9c+YMO2XKlKjqc0VFBTtz5kx2woQJ7Ndff+12+xtvvMGuXLkyqvrs6T6bN29m77zz\nTva6667zqb/h7jPLsuz27dvZmTNnso888ghn+7p7n5944gn29ttv53z/hdznm2++ma2pqWFZlmX/\n9Kc/sW+99RZ75MgRtri4mLVareypU6fYO++8UzB9XrVqFbtly5Zu28f1Pu/Zs4f93//9X5ZlWba9\n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\n9wIAdu3ahaamJiWLqFqPP/44fvnLX2LLli2YMGECHnzwQbS2trLuktDY2Ii//vWvEEURH330Efr6\n+jB79mzWXZIcDkfgIltQUIChoSH+blMUrb6mTp0Kl8uF/v5+9Pb24q233uI1JIrf/e53gXNfdXU1\nALDuZMK1htPgnzX85ptvQhRFbNiwAWPGjFG6WKq1fv16/PGPf0RdXV1g23e/+12sX78eg4ODqKur\nw/r166HX6xUspfotWbIEa9euhU6nw/3338+6S8K//du/Ye/evRBFEXfeeSeqqqpYd0nyeDy49957\ncfLkSQwODuL666/H5MmTWX8JvP/++7jrrruwY8cOvP3221Hra8eOHdi+fTtEUcQtt9yCefPmKV1s\nVfDX3bZt2zB79myUl5cHWp1nzpyJO+64g3UnAwaCRERERBrFrmEiIiIijWIgSERERKRRDASJiIiI\nNIqBIBEREZFGMRAkIiIi0igGgkREREQaxUCQiIiISKMYCBIRERFpFANBIiIiIo0yKF0AIiIpvf/+\n+7jssssCa5D6fD4YjUZcf/31uOqqqxI+/8orr8SWLVvwl7/8BX/+85/x05/+NKn33bt3L2666SaM\nHj0agiBAFEXo9Xrcfvvt+MIXvhD3uV/4whfwwx/+EFOmTEnqvYiIpMJAkIhyjsViwe9+97vA42PH\njuGGG25AXl5ewrVJg5+XqpqampDnHzlyBIsXL8YzzzyDoqKitF+XiEgu7BomopxXWVmJO+64A48+\n+igA4O2338Y3vvENLFq0CHPnzsWyZcvQ398PALjgggvQ09MTeO7x48cxY8YM9Pb2AgBEUcS8efNw\n5MiRhO87fvx4WCwWHDt2DA8//DDuuece3Hjjjbj88svR0dGBjz76SIZPS0SUPAaCRKQJ48ePx5tv\nvgkA2LFjB6666ips374dTz31FN5//30899xzUZ9XUVGB2bNn48knnwQAvPjii3A6nRg/fnzC93zq\nqaeg0+kwduxYAMBLL72EH/7wh/jTn/4Eh8OB7du3S/PhiIjSxK5hItIEQRBgsVgAAHfffTeef/55\n/OxnP8M777yDEydO4LPPPov53Ouuuw4PPfQQrrvuOmzfvh2LFy+Out/Ro0dx5ZVXAgCGhoZQVlaG\nzZs3Iy8vDwAwa9Ys2Gw2AMDEiRNx5swZKT8iEVHKGAgSkSa8+uqrgQkkd911F7xeL6644gpceuml\n+OCDDyCKYsznXnTRRejr68MLL7yAl156CQ8++GDU/cLHCIbzB6IAAhNKiIiUxK5hIsp5b7/9NjZv\n3oylS5cCAHbv3o3bbrsN8+fPhyAIOHDgALxeb8znC4KAjo4OfPe738WCBQtgNpszVXQiIlmxRZCI\ncs7Zs2cDXbQ6nQ5msxl33XUXLr30UgDAnXfeidtuuw0FBQXIy8vDzJkzcfTo0bivedVVV+HBBx/E\nokWL5C4+EVHGCCL7JoiIEvqf//kf/Pa3v8XPf/5zpYtCRCQZtggSESWwZMkSnDp1Cg8//LDSRSEi\nkhRbBImIiIg0ipNFiIiIiDSKgSARERGRRjEQJCIiItKonJ0s4nK5lC4CERERUdIaGxsz/p45GwgC\nylQoERERUaqUasDKWNfwgQMHsGTJEgDAu+++i8WLF6OjowNr1qyBz+cDcG4h+GuuuQbXXnstnn32\nWQDnEsN2dnaio6MDN910E3p6ejJVZCIiIqKclpFA8Gc/+xnuu+8+9Pf3AwAeeOABLF++HFu3boUo\ninjmmWdw8uRJbNmyBb/61a/w6KOPYuPGjRgYGMC2bdtQX1+PrVu34qqrrsLmzZszUWQiIiKinJeR\nQLCmpiYkEeuhQ4cwa9YsAEBrayv27NmDgwcPYsaMGTCZTLDb7aipqcGRI0fgcrkwZ86cwL4vvPBC\nJopMRERElPMyEgjOmzcPBsP54YiiKEIQBACA1WpFb28v3G437HZ7YB+r1Qq32x2y3b8vEREREQ2f\nIuljdLrzb+vxeOBwOGCz2eDxeEK22+32kO3+fYmIiIho+BQJBCdOnIi9e/cCAHbt2oWmpiZMnToV\nLpcL/f396O3txVtvvYX6+no0NDRg586dgX05E5iIiIhIGoqkj1m1ahXuv/9+bNy4EXV1dZg3bx70\nej2WLFmCjo4OiKKIO++8E2azGYsXL8aqVauwePFiGI1GdHV1KVHkrPWVFb8DAPy+60qFS0JERERq\nI4iiKCpdCDm4XC62HoKBIBERUTZQKm7hEnNEREREGsVAkIiIiEijGAgSERERaRQDQSIiIiKNYiBI\nREREpFEMBImIiIg0ioEgERERkUYxECQiIiLSKAaCRERERBrFQJCIiIhIoxgIEhEREWkUA0EiIiIi\njWIgSERERKRRDASJiIiINIqBIBEREZFGMRDMIV9Z8Tt8ZcXvlC4GERERZQkGgkREREQaxUCQiIiI\nSKMYCBIRERFpFANBIkoKx6ASEeUeBoJEREREGmVQugBEuSC4pez3XVcqWBIiIqLksUWQMoLdikRE\nROrDQJCIiIhIoxgIEhEREWkUxwgqxN9NmgvjyTg+joiIKDuxRZCIiIhIoxgIEmUIJ8wQEZHaMBAk\nIiIi0igGgkREREQaxUCQiIiINIPDdEIxECQiIiLSKEXTx1x99dWw2WwAgKqqKtx666245557IAgC\nxo0bhzVr1kCn02HHjh341a9+BYPBgGXLlmHu3LlKFpuIiIgoJygWCPb390MURWzZsiWw7dZbb8Xy\n5cvR3NyM1atX45lnnsH06dOxZcsWPPHEE+jv70dHRwcuvvhimEwmpYpORERZKJfytyqJ9ZhbFAsE\njxw5gr6+PixduhRDQ0O46667cOjQIcyaNQsA0Nraiueffx46nQ4zZsyAyWSCyWRCTU0Njhw5gqlT\npypVdCIiIqKcoFggaLFYcOONN6KtrQ3vvPMObrrpJoiiCEEQAABWqxW9vb1wu92w2+2B51mtVrjd\nbqWKTRJJZzUSrmBCREQkLcUCwdGjR6O2thaCIGD06NFwOp04dOhQ4O8ejwcOhwM2mw0ejydke3Bg\nSETKYPcQEVH2U2zW8K9//Wv84Ac/AAB89NFHcLvduPjii7F3714AwK5du9DU1ISpU6fC5XKhv78f\nvb29eOutt1BfX69UsYmIiIhyhmItggsXLsR3vvMdLF68GIIgYMOGDSgsLMT999+PjRs3oq6uDvPm\nzYNer8eSJUvQ0dEBURRx5513wmw2K1VsIiIiopyhWCBoMpnQ1dUVsf2Xv/xlxLZrr70W1157bSaK\nRUQawa5tIiImlCYiIiLSLAaCRERERBrFQJBSxnUaiYiIcgMDQSIiIiKNYiBIREREMbEXKLcxECRK\nA0+MRESx8RyZPRgIqhR/RERERCQ3BoJEKsIbgPSw3oiI0sNAkIiIiEijGAgSERERaZRiS8wRUe7j\nMm5ElG2Ch5lo4dzFFsEsxnFRRERENBwMBImIiIg0ioGgxrFVkSj78HdLRFJhIEhElIMYLBJRMhgI\nkubxgklERFrFWcOkWpxxSqQuWptNSaQFbBEkzWELYHbj90e5gMcxqQUDQSIiIiKNYiAoA97pERER\nUTZgIEiUBAb3pCStHX9a+7ykDWo9rhkIEhEREWkUA0EiIg1Qa2sEESmLgWCKeDIlteExmV34fRGR\nmjAQJCIiTWJQTsRAkIiIJMTgiii7MBDMAJ4YiTKLvzkiouQwEAzDCwgRJYvni/TkWr3l2uchbeFa\nw0RZRAvrL2vhM8bD9XwpFq3/NkgebBEkIqKo2NJFlPsYCBIRUdaRK0hl8Etaw0CQiIiINEvrwX9W\njBH0+XxYu3Yt3njjDZhMJqxfvx61tbVKF4uIiCircJwhhcuKFsG//OUvGBgYwPbt27FixQr84Ac/\nULpIRFlD63e7pA08zonSkxUtgi6XC3PmzAEATJ8+Ha+99prCJSIiIso9cs1az1RLJFs8U5cVgaDb\n7YbNZgs81uv1GBoagsGQFcWnLMP0HURENFzZEpQKoiiKShcikQceeADTpk3D/PnzAQCtra3YtWtX\n3Oe4XC40NjYO+72T+SKl+LLV/D7pvK9Sz4n1ONXXlUKiz5NM2eSqx2TrLdPvm+7rZqJs6Xxfcn3H\nsV4jldeJ9hw5vnep6iBT55REr5Gp41yq5yT7/ajx+Evm9yTF8ZdKeaW81oS/hlRxS6qyokmtoaEB\nzz77LObPn4/9+/ejvr5e6SIREUUIvwCovSWAiCgrAsHLLrsMzz//PNrb2yGKIjZs2KB0kYiISCIM\nmOXDuqVEsiIQ1Ol0+N73vqd0MYgoS/FiSOnisUO5LisCQSIikh+DHkqHmo8bNZdNLRgISoAHGhGR\nvHieJZIHA0EiIqIcwGA5c3KprhkIEhFRTsqlizWRXBgIUkI8mRLlHv6uSW14TCqDgSARReAJmSiz\n+JsjpTAQJCLF8OJHRKQsBoJEpGoMFolI7bL5PMVAkCjHZPMJiYiIMouBIBExeCQi0igGgkQkCQaT\nRCQnnmPkwUCQiIiIVIeBX2YwECQiioIXIUoXjx3KJjqlC0BEREREymCLIBERURaSouWRrZfEQJCI\nSEG8EBORkhgIEsmEF3gi/g6I1I6BIBERpY2BXmKsI1IzBoJERESUlRhkDx9nDRMRERFpFFsEiShj\nePdORKQuDASJNIgBGZG68TdKmcJAUCX4o5cH65WIiCg2jhEkIiIi0igGgkREREQaxUCQiIiISKMY\nCBIRERFpFCeLUE7h5BBKVzYfO9lcdtImHrPqwUCQiIgoSQxgKNcwENQYnsSIiIjIj4EgZTUGtkRE\nROnjZBEiIiIijVKkRVAURbS2tmLUqFEAgOnTp2PFihXYv38//vVf/xV6vR4tLS24/fbbAQCbNm3C\nc889B4PBgHvvvRdTp05VotiUArbUERERqZ8igeDRo0cxadIk/OQnPwnZvmbNGjz88MOorq7GzTff\njMOHD0MURezbtw/d3d344IMP0NnZiSeeeEKJYhMRERHlFEUCwUOHDuGjjz7CkiVLYLFY8J3vfAcj\nR47EwMAAampqAAAtLS3Ys2cPTCYTWlpaIAgCKioq4PV60dPTg6KiIiWKTkRERDRsauk5kz0Q7O7u\nxmOPPRaybfXq1bj55ptxxRVX4KWXXsLdd9+NH/3oR7DZbIF9rFYr3nvvPZjNZjidzpDtvb29DASJ\niIiIhkn2QLCtrQ1tbW0h2/r6+qDX6wEATU1NOHHiBKxWKzweT2Afj8cDh8MBo9EYsd1ut8tdbCIi\nIqKcp8is4U2bNgVaCY8cOYLy8nLY7XYYjUYcPXoUoihi9+7daGpqQkNDA3bv3g2fz4fjx4/D5/Ox\nNZCIiIgy5vddV6qmK1dqiowRvPnmm3H33Xdj586d0Ov1eOCBBwAA69atw8qVK+H1etHS0oJp06YB\nONdquGjRIvh8PqxevVqJIqtCrh6EREREpAxFAsGCggI88sgjEdunT5+OHTt2RGzv7OxEZ2dnJopG\nREREpBlMKE1ERESkUQwEiYiIiDSKgSARERGRRikyRpCIksMJQurB74KIchFbBImIiIg0ioEgERER\nkUaxa5hIIexqJCIipbFFkIiIiEijGAgSERERaRQDQSIiIiKNYiBIREREpFEMBImIiIg0ioEgERER\nkUYxECQiIiLSKAaCRERERBrFQJCIiIhIoxgIEhEREWkUA0EiIiIijWIgSERERKRRDASJiIiINIqB\nIBEREZFGGZQuAKnP77uuVLoIRERElAFsESQiIiLSKAaCRERERBrFQJCIiIhIozhGMAGOlyMiIqJc\nxRZBIiIiIo1iIEhERESkUQwEiYiIiDSKgSARERGRRjEQJCIiItIoBoJEREREGsVAkIiIiEijMhYI\nPv3001ixYkXg8f79+9HW1ob29nZs2rQpsH3Tpk1YuHAh2tvbcfDgQQBAT08Pli5dio6ODixfvhx9\nfX2ZKjYRERFRzspIILh+/Xp0dXXB5/MFtq1ZswZdXV3Ytm0bDhw4gMOHD+PQoUPYt28furu7sXHj\nRqxbtw4AsHnzZixYsABbt27FxIkTsX379kwUm4iIiCinZSQQbGhowNq1awOP3W43BgYGUFNTA0EQ\n0NLSgj179sDlcqGlpQWCIKCiogJerxc9PT1wuVyYM2cOAKC1tRV79uzJRLGJiIiIcpqkS8x1d3fj\nscceC9m2YcMGzJ8/H3v37g1sc7vdsNlsgcdWqxXvvfcezGYznE5nyPbe3l643W7Y7faQbUREREQ0\nPJIGgm1tbWhra0u4n81mg8fjCTz2eDxwOBwwGo0R2+12e2B/i8US2JeIiIiIhkeRWcM2mw1GoxFH\njx6FKIrYvXs3mpqa0NDQgN27d8Pn8+H48ePw+XwoKipCQ0MDdu7cCQDYtWsXGhsblSg2ERERUU6R\ntEUwFevWrcPKlSvh9XrR0tKCadOmAQCampqwaNEi+Hw+rF69GgCwbNkyrFq1Cjt27EBhYSG6urqU\nKjYRERFRzhBEURSVLoQcXC4XWw6zzFdW/A4A8PuuKxUuCRERUWYpFbcwoTQRERGRRjEQJCIiItIo\nBoJEREREGsVAkIiIiEijGAgSERERaRQDQSIiIiKNYiBIREREpFEMBImIiIg0ioEgERERkUYptsQc\nUTiuKEJERJRZbBEkIiIi0igGgkREREQaxUCQiIiISKMYCBIRERFpFANBIiIiIo1iIEhERESkUQwE\niYiIiDSKgSARERGRRuV0QmmXy6V0EYiIiIhUSxBFUVS6EERERESUeewaJiIiItIoBoJEREREGsVA\nkIiIiEijGAgSERERaRQDQSIiIiKNUix9zODgIO69914cO3YMAwMDuPnmm/Hb3/4WL774IkRRRGNj\nI1atWoXrr78eAwMDMBqN0Ov1mDJlCvbt2wefz4ezZ8/CbrfD4/HAZDLBZDLB4/EAAEwmE4xGI86c\nOQO9Xg+v1wuz2Yz+/n7odDr4fD4IggC9Xo+hoaHzFWIwYGhoCIIgQG0Tqv1lSqVsmf4c6byfGuo6\nW8utpnLEE/ybS7as6TxHDd+j0t+H0u+vFC197nifNdbf/L8nqd5HSpkqm5TPEQQBAKJek/0xR/g5\nLC8vDxaLBWfPnoXP50N/fz+Ac3GHwWDA4OAg9Ho9fD4fiouLcfr06cDrT5w4Ea+++iqcTif6+/th\nNBrxrW99C3/4wx9w/PhxiKKIMWPGYOXKlfjrX/+K5557DgaDAffeey+mTp0a9zMq1iL45JNPwul0\nYuvWrfj5z3+O++67D2+88QZ+/OMf49lnn4XL5cItt9yCpqYm/Md//Ae8Xi9OnTqFN998E8uWLYPN\nZoMoijAYDPj617+OiooKnDlzBl6vF+PGjUNLSwvcbjcAoKysDFOmTMHAwEDg/WfPng273R4IAseN\nG4cpU6YEHouiiHHjxgW+bACor6+HXq8P+Rx5eXkhj8OfE/5Yr9fDbDaHPKeuri5kn8LCwpDH/s/g\nP9BEUURZWVnI3w0GA3S60K+zvr4+5OCsq6sL+fuECRNC3ken06G+vj5kn4qKisD/w8sU7X1FUYTF\nYgnZJ/yxTqdL+TkVFRUh7y8IQkQ9GgyR9zX5+fkhj6uqqkIe5+XlIS8vL1BPer0eNpst4r3Dy+Zw\nOEKeYzQaQ/apqakJeVxaWgq73R54HO04KC8vD/l78LFmMpmg0+lC6sBoNKKysjLkOy4pKQn83+Fw\nIJrwui0qKgr8X6fTYdSoUSF/D69rQRAwcuTIwOPwOvaXP5hOp4PJZAqUVRAEmEymiH3C3zf4Of7X\nCBb8ef1lCd7HYrFEvG74e4miiNLS0pif179/+OuMGDEioqw6nS6kvOGvEfy7FQQBRUVFEb8ri8US\nsi34+wHOfe/hrx1+Pgh/TrTyB//WBUGIOM5ra2sjfnP19fUh24LrP/w3AABmszlkf4PBEHH8Bf9u\no/2Wwr93QRBCnmOxWFBbWxvyO8jPzw85NxuNxoh6NhgMEcdpfn5+yH7hdVJVVRX1GhD+nODHlZWV\nEefZ8HoJf47D4Ygob/DvLPyYBc7VdfC5zGg0hhwXPp8v5HcLnKvveMeFKIoR57IxY8YkvG6EH+fh\nwt/X5/NF/OYS/QZFUUz4nNLS0rjXDX9jULjwug4+NwPnjrngurZYLLDZbIHX8nq9mDJlCgCgoKAA\nOp0O+fn5GDVqFIaGhnD27Fnk5+ejpKQEdXV1GDNmDIaGhvC1r30Ndrsdra2tOHXqFL785S/jwIED\nuPTSS2E0GmG1WlFeXo6XX34Zl19+OR566CFce+21GD9+PMaMGYNvfetbuOeee7Bv3z50d3dj48aN\nWLduXcTnC6dYIHj55Zfj29/+NoBzFW21WnH27FnMmjUrEDmfPn0aGzZsgE6nw5133gkA6O/vx4QJ\nE7BixQoAwGeffYaSkhI4HA6YzWaIoogvfvGL0Ov1gR9xf38/xowZE3hvo9GIWbNmBaJxAJg3b17I\nwet0OjFp0qTAY0EQcNlll4WcgPLz89Hc3Byyz6RJkyKCr+DHY8aMQXFxceCx2WzG1KlTQ/a55ppr\nIu5Agi86ADBz5syQxxaLJaRsgiDA6/WG7BP+Yw0PnCwWCyorK0O2TZs2LWKf8NcIPiHpdLqIsl19\n9dUhP0az2YwZM2YEHuv1elx88cUhZW9qagp5jby8vJCLTn5+PlpaWkL2+epXvxrxnPBANjjI0+v1\nyM/Px+DgYGBbR0dHSNkAoKGhIeQ1CgsLAzcZAHDRRReF7G82m1FYWBiyrbm5OeRGpL29PeSEVFxc\nHPKaVqs1cCcJnDux+Hy+iMAn+DX9n8nP/3rh3/PEiRNDHge3iPt8Ppw+fTrk+xJFMeS3IIpiyPHZ\n19cXcbL3er0hx7nX64XVag15jfDP4vP5Ii5CwcGz/zwRzOPxwOl0hrxG8HPOnj0bcfEDEHFiD657\n/1188EWnvLw8cGL3C7/AhLcKOJ3OkLo3GAyBHgv/5/H3dPiVlpZicHAw5HWCz1PA+WMh2Keffhry\nutEubuHPOXr0aMhzwo8lf2tE8D4nTpyI2aIyODgYcRwMDAyElEWn00XcPAd/X16vN9B74ycIQsSF\nOfjvZ8+exYkTJ0Je02QyhdT94OAgCgoKQvbx+XwR50iv1xvy+cLrRKfTRTzHaDSGPGdoaCjk8dmz\nZ0Mem81m+Hy+kJui8OfY7faIFqbweg8vmyAI6OvrC9kWfFwAkTeH0Vrigo8LIPL8cebMmZCyCIIQ\nUf/h31f48RhtW/g1Lvia7Rf++w+/AQo/p/T394eUP7wRxd+KFiz4Zs7v7NmzEWX57LPPAucIfyOR\n/3MJggDj/9/enQdHUeZ/HP/MZHITCHFBUQQR8VwVgdUCgR/osiAVAVlYISygKCIVipJrIYgsKnKo\nlHKIIogrrHKsF4cKorsSLlmYQkXWrCuGIwGJIZCD3Jn+/WF1Oz05CApMJv1+VVnSk366v91PT8+n\nn+5kwsPl8/nk8/kUGxsrt9uttLQ06w7nTTfdpNOnTys9PV0//PCDYmJidPToUZ0+fVp79uyx3ksj\nRozQ0aNHdeTIEa1YsUJxcXEqLS1VUVGRLr30Up0+fVp33HGHCgoK1KxZMxUXF6tt27bWxV1FRYVy\ncnIq1W/b5hp/egHFxsaqQYMGKigo0NixYzV+/Hi5XC6dOXNGY8eO1YABA6wPgltvvVVr1qyxrura\ntm2rv//973K5XCopKdGyZctUUFBgXTWuWrVKjzzyiH788UdJ0qlTp5Sammqtu7S0VCtXrrQFgFWr\nVtlCT35+vlJTU20HxKpVq2xvPsMwbIHF5XLp008/tW3n9u3bbdN/sWPkAAAffklEQVTffvutjh8/\nbk2XlJRUarN27VrbtMvlsrWRpK1bt9qmy8rKKtV29OjRGmvZv3+/bfsKCwv15ZdfVtvGMIxKJ43i\n4mKdPn3amvb5fNq3b59tng8++MC2Hp/Pp8OHD9uWu2vXLtv03r17bcs4ePCgsrOzrekzZ87o3//+\nt22eLVu22KYrKip06NAh23IPHjxoq+PUqVO2ILRu3Tp988031rTL5bIdO4Zh6OTJk7b9sGfPHtso\nRklJSaVlbNiwwfaBvm7dOuXn51vTeXl5tjry8vJsgcv88PE/eZaVlWnOnDm2bfY/BswaA/vst7/9\nrW3af73ST8d+4ImwZ8+etmn/945hGJVG6iTZbkcYhlHpAzQwQEZFRWnIkCG2+v33mWEYlUJRUVGR\nLbAVFRVVWk/gSTwyMrLSyIH/PjCDVuB7o3///rY2/vvA3MeBAeDuu++2pktLSyt9eGdlZdnqLS4u\n1g033GBNV3VB53+BYHr22Wcr1eY/T0RERKUP3sALqcDa/MOxaf78+ZXW4y/wODAMo9IFQeDxZt76\n8l+G/yiU2+3WsGHDbG0Cj+nAAJSbm6tFixZZ01Xd3qtqBLNfv3626cDjLS8vz3a8RUVFafny5bb1\n+Id96adjx3/7ioqKbIGlquM6cN/7D2yY/M8fUuXQXVFRoRUrVtjmOXHiRKULmLMdF4Ehz/88bK4n\n8LgIbBO4Dp/PV+n9dOrUKdv00aNHK40mv/7667Z5zM9408mTJ23Tp0+frrSvA+c5duyYbdrj8ahN\nmza21wL7o6ysTFFRUdZxmJ6erlWrVlkXF4Zh6LvvvpPL5VJ+fr7y8vJUWlpqPXpWWlqqG2+80Rrg\ncrvdysvLU0JCgnWclpeXy+v1qn///jp06JA6deqkK6+8Um63W926ddPGjRs1btw4RUREaNGiRbrk\nkktUXl6uH3/80XZ+i42NrXSsBArqN4scP35cycnJSkpK0oABA3TnnXfq0ksvVVJSkuLj4zVx4kR9\n9NFHSk5OVtu2bfX+++8rKirKuk16+PBhlZeXq3nz5srIyNDvf/97ffDBB2rTpo3S09MVFhZmvTni\n4+OVnZ2tiIgI6z58eXm5mjZtqqysLMXExKiwsNCqzbwqMK/a/W8ZmwLb1MQ8AKq6Ags8SdXmeQlz\nedVNV8V8buF8PqdV1euB2xpYW5MmTZSdnV3pqrKm5Ve1T8ztqa7WmvZ14M/M6SZNmthOLuZJ3xwh\nqqpfzmU9NbU5Hy7Uci+E6p6rqYsuVm1VnVOqe2/777/AfVnd+aGm937gc01VrSeQ/+hpdcedf3tz\ntMS/lsBaw8PDbQGzqvWf7RxW1TJcLleNtVa1zMBzWGDbwPNFTWraV4HrDjx/VNWmunOz/7Pkkurk\ncXGhPzdqWn91nxu16Z/Az1Bz3ssuu0xZWVm2dnFxccrPz9fNN9+s/fv3V1pWeHi4IiMjVVBQoDvu\nuEN79uxRTEyMCgoKNGHCBM2fP1/x8fE6c+aMysrK1KtXL5WWlmr79u1yu91aunSppk+frmXLlum9\n997TqlWrrDtLffv21ZgxYyT9dHGzfPnySo+L2PZXtT+5wLKzszVixAhNmjRJAwYMUHZ2tgoLC5WY\nmKgBAwYoNTVVV155pQYPHqxJkyapvLxcHo/HmueGG25QaWmpDMNQr169FBYWppycHHk8HuXm5qpR\no0aKjY21njlp166ddQJyu91q3LixwsLCrNsU5q2ryMhIayjZ4/HYrsjN180r3OLiYuvZIPNn5qil\nGSDM/5u3XANPiFLlZwJbtWpV5XMw/ldV/rcrpZ+fRfRvEx0dbWtzzTXX2Gowr4gD1+OvVatWtjbm\nkL85RG8+t+Fff5cuXST9fNVu3vY1r1LMKyP/Nv632CVZz6n532IwT+amjh072tpcd911tjbmydB/\nH5i3Rsza3G63wsLCrNfNq3lzmwzDsG4nB7Yxb0may/dfj3m7y2xjHhPmPM2bN7dNS1LXrl1t2+N/\nG9tsbz5UbK4vNjbWNrLhvx/Dw8Ot/vTfj+azbKbAZ4DMUR3/efzX4XK5bFfMHo/HWr757JP/s6Pm\nvvzDH/5gW89dd91ltXe5XIqLi7P2h9nGPJbM18zbOOZ6/Gs023Tr1s22LeZtbbON+Z+5/10ul+32\nsnlMm8/1SD+/L8xtCw8Pt91qNJ958m9j7jOz3yTZ1mOu2387zA9l//dU4HPG5jnLf9tjYmJsx1Lg\nIx3mc13+bQLPD+Z73Txm/es3BZ4fWrZsaWtj1mbOFx8fX2mUyhx1M88pge/97t2727bffFTIv44r\nr7zS1sY8Zs39HPgogiTrmPV/T5rHnT//dZvnZjOQmP1nbl9eXl6l/oqPj6+yv8x6/M8j5nyNGjWy\ntTGfVfRvE/hsqLk95n6MjIy0PXtnHov+bcxzpP9+rOq48J82n6s26zb3cU3HhTl6abYxf+5/7AY+\nm2g+kmO2MY9hs2+Liooq3aYOvLthPvIR+GiBv8BHPMxj2Gxjfm74949/P5jHjXn+NWs1+8jj8ahJ\nkybWNufm5qpBgwbyeDyKjo5W+/bt5fF4rMdgfvOb39jOgQ0bNtSJEycUFRWlvLw8vfTSS7rsssus\nDNO4cWPt2LFDt9xyizIzM7Vv3z41a9ZMf/7zn3X77bcrLi5Oe/bskc/n07Fjx+Tz+WoMgVIQRwRn\nzpypjz76yPoFhsOHD6ukpMS6LRMdHa077rhDmzdvth6CzcnJUVxcnDX8WlhYaN2XN+/Hm29Ys43/\ncHNERITt9kdVVxN1eVQCqMq5jPAG2y+pNVjbF0q1OgH9gbqkqhHXsx1vERERio2NVUlJie2RAf/R\navO3hisqKhQREWHNM3r0aC1atEgNGza0BsHatGmjiooKZWRkWM87Pvnkk9q0aZNSU1Pl8/mUkpJS\n6Zn7StsSzFvDAAAACB7+oDQAAIBDEQQBAAAciiAIAADgUARBAAAAhyIIAgAAOBRBEAACTJkyRe++\n+261P09JSVFmZuZFrAgALgyCIACco927d/P36QDUC/wdQQCOZxiG5syZo88++0xNmzZVRUWFBgwY\noMOHD2vXrl3Kzc1V48aNtXDhQr333ntasGCBWrRooTfffFNHjx7V7NmzVVxcrMaNG+vJJ5+s9M0X\nAFBXMSIIwPE2b96s//znP9q4caPmz5+vI0eOqKKiQt9//71Wr16tzZs3q0WLFtqwYYMeeeQRNW3a\nVK+++qpiY2M1bdo0zZs3T++9954efPBBPfHEE8HeHACoNc/ZZwGA2svIyFCPHj2s79I0v4Nz2LBh\n1vfM1qRv375auXKlPvnkE23evFlLliyp1Xp3796tkSNHWt/VbX5J/JgxY6zvNa7O1KlTdf/99ys8\nPFwJCQnq2rWrwsLCdOLECXXs2FFut1v5+flKTU3V4cOHre9D3bJli7777juNHj3aWlZBQYFt2V99\n9ZXefvttPfXUU5XWu3//fi1dulQLFizQlClT1KZNGz300EO12l7TiBEj9PzzzyshIUEjR47U5MmT\nre8VB4CzIQgCOO+ioqK0bt06azozM1MPPPCAoqOj1bNnzxrb+rc7Vy1atLC1T0tL0+DBg/Xpp5+e\n9YvX/Z+S8Xg8On36tNLS0tSnTx/98Y9/1JYtWxQREaFTp05Z32HeunVrtW7d2lpnRUWFsrOzbcv9\n7rvvdOLEiSrXefPNN2vBggW/aFtNO3bssP69dOnSX7UsAM7DrWEAF9wVV1yhsWPH6rXXXpMkpaen\n68EHH9T999+v7t27a/To0SopKZEkXXfddcrJybHaHjt2TLfddpvy8/Ml/RTYevbsqbS0tLOu9/rr\nr1dUVJQyMzO1cOFCTZkyRQ899JB69eqlpKQkK6BFRkZq586dKi0tVW5urrZt2yaXy6WGDRuqc+fO\nuuaaa6zAlZKSopKSEqWnp+vkyZM6ePCg9u7dq71796pHjx7q1auX+vfvr82bN+v48eNasGCB9u7d\nq5SUFO3evVt9+vTRoEGD1KdPH23btk2JiYlWvV6vV3/605/Uu3dvPfPMMyovL69yn5jTKSkpkqTh\nw4fr+PHjuuuuu7R//35J0po1a5SYmKg+ffpoxIgRSk9Pl/TTb0TPnDlTQ4cOVY8ePTRq1CidOXPm\nF/QqgPqAIAjgorj++uv17bffSpLWrl2rfv36ac2aNfr444+VkZGhzz77rMp2l19+uTp27Kj169dL\nkj7//HPFx8fr+uuvP+s6P/74Y7ndbutW6d69ezV//nxt2rRJDRs21Jo1ayRJ0dHRuummm5SYmKjR\no0erdevWKi4uVmFhoebMmaPhw4fruuuuU0ZGhqKiopSQkKCUlBTl5OSoWbNmmjNnjh5++GGFh4dr\n3bp1mjVrlj7//HM1a9ZMY8eOVYcOHTR79mxJ0v/+9z/NmzdP69evV0REhK3eH374QX/729/0/vvv\nKy0tTWvXrq1x+8xlvvHGG2rWrJn1+q5du7Rs2TKtWLFC69evV2JiopKTk61Rz6+//lqvvfaaPvzw\nQ2VlZWnTpk1n3ZcA6iduDQO4KFwul6KioiRJkyZN0o4dO7R06VIdOnRIWVlZKiwsrLbtkCFD9Nxz\nz2nIkCFas2aNBg8eXOV8R44cUd++fSVJ5eXluuyyy7R48WJFR0dLkm6//XY1aNBAknTjjTcqNzfX\napuUlGQFK9POnTs1ZMgQ9erVy/b65ZdfrjFjxig6OlrR0dF6++23tXr1ar3wwguaP3++OnXqpPHj\nx1dZY7NmzXTFFVdU+bO+ffsqJiZGktSnTx9t3bpVSUlJ1e6X6mzbtk29e/e2bof3799fzzzzjDIy\nMiRJXbp0sULotddea9sPAJyFIAjgoti/f7/1CyTjx49XRUWF7rnnHnXr1k3Hjx+v8e/yderUSUVF\nRdq1a5f27t2ruXPnVjlf4DOCgcwgKsn6hZJzVVRUpIMHD6pNmzZWsJKkQYMGqXv37tqxY4e2bdum\nRYsWWaOY/sygV5WwsDDbtMdT+RRdWlp61hqr2i7DMKxbzedjPwCoH7g1DOCCS09P1+LFizVixAhJ\n0vbt25WcnKzevXvL5XLpyy+/VEVFRbXtXS6XkpKS9PjjjysxMVGRkZEXq3Sb4uJizZo1S127dq00\nqjdo0CB988036t+/v55++mnl5eUpNzdXYWFhVgA7mw8++EClpaUqKSnRu+++q65du0qSEhISrGf/\ntmzZYmtT1fI7d+6sDz/80Hqu8J133lF8fLxatmz5i7YbQP3FiCCA8664uNi6Ret2uxUZGanx48er\nW7dukqRx48YpOTlZjRo1UnR0tH73u9/pyJEjNS6zX79+mjt3ru6///4LXb7Ns88+q5dffllut1vl\n5eXq1KmTHn/88UrzTZw4UbNmzdKLL74ot9utMWPGqHnz5vL5fHrxxReVnJysYcOG1biu5s2ba/Dg\nwSosLFSPHj103333SZKmTZump556Sg0bNlSnTp3UpEkTq02PHj2UlJSkxYsXW6/deeedeuCBBzR8\n+HD5fD4lJCRoyZIlcru59gdgxzeLAAgJGzdu1Pvvv69ly5YFuxQAqDcYEQRQ5w0dOlTZ2dlauHBh\nsEsBgHqFEUEAAACH4oERAAAAhyIIAgAAOBRBEAAAwKHq7S+LeL3eYJcAAABQa+3bt7/o66y3QVAK\nzg6ti7xeL/uinqJv6yf6tf6ib+uvX9u3wRrA4tYwAACAQxEEAQAAHIogCAAA4FAEQQAAAIciCAIA\nADgUQRAAAMChCIIAAAAOVa//jiAA1HX3TlhX9Q/eyrBNbpjX99ctL0BtlwegfmNEEAAAwKEIggAA\nAA5FEAQAAHAogiAAAIBDEQQBAAAciiAIAADgUARBAAAAhyIIAgAAOBRBEAAAwKEIggAAAA5FEAQA\nAHAogiAAAIBDEQQBAAAciiAIAADgUARBAAAAh/IEu4DaKCsr05QpU5SZmSm3262nn35arVu3DnZZ\nAAAAIS0kRgS3bt2q8vJyrV69WsnJyXrxxReDXRIAAEDIC4kg2KpVK1VUVMjn86mgoEAeT0gMZAIA\nANRpIZGoYmJilJmZqXvuuUenTp3SK6+8EuySAAAAQp7LMAwj2EWczezZsxUREaEJEybo+PHjGj58\nuDZs2KDIyMhq23i93otYIQDYzXgr4/wuL6n5eV1vbZcH4OJp3779RV9nSIwINmzYUOHh4ZKkRo0a\nqby8XBUVFWdtF4wdWhd5vV72RT1F39Zh5zkI1rqfa7lejpvg4D1bf/3avg3WAFZIBMEHHnhAU6dO\nVVJSksrKyjRu3DjFxMQEuywAAICQFhJBMDY2VvPnzw92GQAAAPVKSPzWMAAAAM4/giAAAIBDEQQB\nAAAciiAIAADgUARBAAAAhyIIAgAAOBRBEAAAwKEIggAAAA5FEAQAAHAogiAAAIBDEQQBAAAciiAI\nAADgUARBAAAAhyIIAgAAOBRBEAAAwKEIggAAAA7lCXYBABBK7p2wLtglAMB5w4ggAACAQxEEAQAA\nHIogCAAA4FAEQQAAAIciCAIAADgUQRAAAMChCIIAAAAORRAEAABwKIIgAACAQxEEAQAAHIogCAAA\n4FAEQQAAAIciCAIAADgUQRAAAMChCIIAAAAO5Ql2AbW1ZMkS/fOf/1RZWZkGDx6sgQMHBrskAACA\nkBYSQXD37t3at2+fVq1apaKiIi1fvjzYJQEAAIS8kAiC27dv17XXXqvk5GQVFBToL3/5S7BLAgAA\nCHkhEQRPnTqlY8eO6ZVXXlFGRoZGjx6tTZs2yeVyBbs0AACAkBUSQTA+Pl5XX321IiIidPXVVysy\nMlI5OTm65JJLamzn9XovUoV1H/ui/qpPfTvjrYzazZfUPCjrDabz3c/3TlhXq/nOZV8Hq/9CTX16\nz8IuFPs2JIJg+/bttWLFCj344IPKyspSUVGR4uPja9UOPx2Y7Iv6qd71bS2DxHnf5hAIgrXe5vO8\nLee0r4PVfyGk3r1nYfm1fRusEBkSQbB79+7as2ePBgwYIMMwNH36dIWFhQW7LAAAgJAWEkFQEr8g\nAgAAcJ7xB6UBAAAciiAIAADgUARBAAAAhyIIAgAAOBRBEAAAwKEIggAAAA5FEAQAAHAogiAAAIBD\nEQQBAAAciiAIAADgUARBAAAAhyIIAgAAOBRBEAAAwKEIggAAAA5FEAQAAHAogiAAAIBDeYJdAIC6\n594J62o134Z5fS9wJTDVtk9CYb0cX0DdwYggAACAQxEEAQAAHIogCAAA4FAEQQAAAIciCAIAADgU\nQRAAAMChCIIAAAAORRAEAABwKIIgAACAQxEEAQAAHIogCAAA4FAEQQAAAIciCAIAADgUQRAAAMCh\nCIIAAAAOFVJB8OTJk/q///s/HTx4MNilAAAAhLyQCYJlZWWaPn26oqKigl0KAABAvRAyQXDu3Lka\nNGiQmjZtGuxSAAAA6oWQCILvvvuuEhIS1KVLl2CXAgAAUG+4DMMwgl3E2QwZMkQul0sul0vffPON\nrrrqKr388stq0qRJtW28Xu9FrBCoX2a8lVG7+ZKaB2W9gL/aHofBOq6B2mrfvv1FX6fnoq/xF3jz\nzTetfw8dOlQzZsyoMQSagrFD6yKv18u+qKcuWN/W8gPzvK+bIIhfoNbHYbCOaz+cj+uvX9u3wRrA\nColbwwAAADj/QmJE0N/KlSuDXQIAAEC9wIggAACAQxEEAQAAHIogCAAA4FAEQQAAAIciCAIAADgU\nQRAAAMChCIIAAAAORRAEAABwKIIgAACAQxEEAQAAHIogCAAA4FAEQQAAAIciCAIAADgUQRAAAMCh\nCIIAAAAORRAEAABwKE+wCwBQ/907YV2wS0A9FgrHl63GtzKqnW/DvL4XoRrgZ4wIAgAAOBRBEAAA\nwKEIggAAAA5FEAQAAHAogiAAAIBDEQQBAAAciiAIAADgUARBAAAAhyIIAgAAOBRBEAAAwKEIggAA\nAA5FEAQAAHAogiAAAIBDEQQBAAAciiAIAADgUJ5gF1AbZWVlmjp1qjIzM1VaWqrRo0fr7rvvDnZZ\nAAAAIS0kguD69esVHx+v5557TqdPn1a/fv0IggAAAL9SSATBXr16qWfPnpIkwzAUFhYW5IoAAABC\nX0gEwdjYWElSQUGBxo4dq8ceeyzIFQEAAIQ+l2EYRrCLqI3jx48rOTlZSUlJGjBgwFnn93q9F6Eq\n4Gcz3sqo3XxJzc/r8gCcX6HwHg1WjbVdL36Z9u3bX/R1hsSIYHZ2tkaMGKHp06erY8eOtW4XjB1a\nF3m9XvbFxVDLE26t+4IgCARFKLxHg1UjnyXV+7WftcEawAqJPx/zyiuvKC8vT4sXL9bQoUM1dOhQ\nFRcXB7ssAACAkBYSI4LTpk3TtGnTgl0GAABAvRISI4IAAAA4/wiCAAAADkUQBAAAcCiCIAAAgEMR\nBAEAAByKIAgAAOBQBEEAAACHIggCAAA4FEEQAADAoQiCAAAADkUQBAAAcCiCIAAAgEMRBAEAAByK\nIAgAAOBQBEEAAACHIggCAAA4lCfYBYSyeyesq9V8G+b1vcCV1D213Te1Fcx9eL63BUDdFgrv+WDV\neCHWG6zzO5/hP2FEEAAAwKEIggAAAA5FEAQAAHAogiAAAIBDEQQBAAAciiAIAADgUARBAAAAhyII\nAgAAOBRBEAAAwKEIggAAAA5FEAQAAHAogiAAAIBDEQQBAAAciiAIAADgUARBAAAAh/IEu4Da8Pl8\nmjFjhv773/8qIiJCM2fOVMuWLYNdFgAAQEgLiRHBTz75RKWlpVqzZo0mTJigOXPmBLskAACAkBcS\nQdDr9apLly6SpLZt2+rrr78OckUAAAChLySCYEFBgRo0aGBNh4WFqby8PIgVAQAAhD6XYRhGsIs4\nm9mzZ+vWW29V7969JUldu3ZVampqjW28Xu/FKA0AAOC8aN++/UVfZ0j8ski7du30r3/9S71799YX\nX3yha6+99qxtgrEzAQAAQklIjAiavzX87bffyjAMzZo1S61btw52WQAAACEtJIIgAAAAzr+Q+GUR\nAAAAnH8EQQAAAIciCAIAADhUSPzWMM5uy5Yt2rRpk+bNmydJ+uKLL/TMM88oLCxMnTt31pgxYyRJ\nixYt0meffSaPx6OpU6fqlltuUU5OjiZOnKji4mI1bdpUs2fPVnR0dDA3BwEMw1DXrl111VVXSfrp\nD6tPmDDhnPoZdR9fp1k/3Hfffdbfvm3evLkeffRRTZkyRS6XS23atNFf//pXud1urV27VqtXr5bH\n49Ho0aPVvXv3IFeO6nz55Zd6/vnntXLlSh0+fLjW/VlcXKxJkybp5MmTio2N1dy5c5WQkBDszbEz\nEPKefvppo2fPnsZjjz1mvdanTx/j8OHDhs/nMx5++GHjwIEDxtdff20MHTrU8Pl8RmZmptG/f3+r\n/TvvvGMYhmEsWbLEeP3114OxGajBoUOHjFGjRlV6/Vz6GXXf5s2bjcmTJxuGYRj79u0zHn300SBX\nhHNVXFxs9O3b1/baqFGjjM8//9wwDMN44oknjI8//tjIysoyEhMTjZKSEiMvL8/6N+qeV1991UhM\nTDQGDhxoGMa59efy5cuNBQsWGIZhGBs3bjSefvrpoG1Hdbg1XA+0a9dOM2bMsKYLCgpUWlqqFi1a\nyOVyqXPnztq5c6e8Xq86d+4sl8ulyy+/XBUVFcrJybF9hV/Xrl21c+fOIG0JqnPgwAGdOHFCQ4cO\n1ciRI/X999+fcz+j7uPrNENfWlqaioqKNGLECA0bNkxffPGFDhw4oNtvv13Sz+fYr776Srfddpsi\nIiIUFxenFi1aKC0tLcjVoyotWrTQwoULrelz6c/Az9ddu3YFZRtqwq3hEPKPf/xDb7zxhu21WbNm\nqXfv3tq9e7f1WuBX8sXGxuro0aOKjIxUfHy87fX8/HwVFBQoLi7O9hqCp6p+nj59uh555BHdc889\n2rt3ryZNmqSXXnrpnPq5zt2OQCXVfZ2mx8OpOlRERUXpoYce0sCBA3Xo0CGNHDlShmHI5XJJqvq8\na75eUFAQrLJRg549eyojI8OaPpf+DIXPV84uIWTgwIEaOHDgWedr0KCBzpw5Y02fOXNGDRs2VHh4\neKXX4+LirPmjoqKseRE8VfVzUVGRwsLCJEkdOnRQVlaWYmNjz6mfUfcFvnd9Ph8hMMS0atVKLVu2\nlMvlUqtWrRQfH68DBw5YPzffp1Wdp3mfhga3++ebqWfrT//X6+rnK7eG66EGDRooPDxcR44ckWEY\n2r59uzp06KB27dpp+/bt8vl8OnbsmHw+nxISEtSuXTtt3bpVkpSamsrX89VBixYtskYJ09LS1KxZ\nM8XFxZ1TP6Pua9eunfU96rX9Ok3ULW+//bbmzJkjSTpx4oQKCgp05513WndtUlNT1aFDB91yyy3y\ner0qKSlRfn6+Dh48SH+HiBtvvLHW/RkKn698s0g9sXv3bq1evVovvPCCpJ8+RGbNmqWKigp17txZ\n48aNkyQtXLhQqamp8vl8SklJUYcOHZSdna3JkyfrzJkzaty4sebNm6eYmJhgbg4C5ObmatKkSSos\nLFRYWJimT5+u1q1bn1M/o+7j6zRDX2lpqVJSUnTs2DG5XC5NnDhRjRs31hNPPKGysjJdffXVmjlz\npsLCwrR27VqtWbNGhmFo1KhR6tmzZ7DLRzUyMjI0fvx4rV27Vunp6bXuz6KiIk2ePFk//vijwsPD\nNW/ePDVp0iTYm2NDEAQAAHAobg0DAAA4FEEQAADAoQiCAAAADkUQBAAAcCiCIAAAgEMRBAEAAByK\nIAgAAOBQBEEAAACH+n8ERBTI4N1BcAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e7eebcbb00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2018-07-14 16:48:15.999417\t计算回测结果\n",
      "2018-07-14 16:48:16.002413\t------------------------------\n",
      "2018-07-14 16:48:16.002413\t第一笔交易：\t2018-02-27 08:01:00\n",
      "2018-07-14 16:48:16.002413\t最后一笔交易：\t2018-06-30 23:59:00\n",
      "2018-07-14 16:48:16.002413\t总交易次数：\t43\n",
      "2018-07-14 16:48:16.003412\t总盈亏：\t2,486.53\n",
      "2018-07-14 16:48:16.003412\t最大回撤: \t-1,342.64\n",
      "2018-07-14 16:48:16.003412\t平均每笔盈利：\t57.83\n",
      "2018-07-14 16:48:16.003412\t平均每笔滑点：\t0.4\n",
      "2018-07-14 16:48:16.003412\t平均每笔佣金：\t15.91\n",
      "2018-07-14 16:48:16.003412\t胜率\t\t32.56%\n",
      "2018-07-14 16:48:16.003412\t盈利交易平均值\t642.65\n",
      "2018-07-14 16:48:16.003412\t亏损交易平均值\t-224.5\n",
      "2018-07-14 16:48:16.003412\t盈亏比：\t2.86\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsQAAASUCAYAAABgCxtOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4U2Xax/Ff6EbtIuCCIovgWBUdtlbAsaAom6ijIpS2\nCjoiLqNVEAFRVqkgIgiCICogA7IKg7yOC4tIZREkCCgKMyIoCiiKaFuWQnPePx6pIKWkbZKT5Hw/\n19VLc3pyzp30kNx5cj/347IsyxIAAADgUBXsDgAAAACwEwkxAAAAHI2EGAAAAI5GQgwAAABHIyEG\nAACAo5EQAwAAwNFsSYh//vlnXXPNNdq2bZu++eYbZWRkKDMzUwMHDpTH45EkzZkzR+3bt1daWpqW\nLVsmSTp06JCysrKUmZmpbt26ad++fXaEDwAAgDASGegTHjlyRAMGDFDFihUlScOGDVP37t3VpEkT\nDRgwQEuXLlWDBg00bdo0zZs3T4cPH1ZmZqauvvpqzZw5U0lJScrKytJ//vMfjR8/Xv369TvtOd1u\nt78fFgAAAIJccnJysdsDnhAPHz5c6enpeuWVVyRJmzdvVuPGjSVJzZs318qVK1WhQgU1bNhQ0dHR\nio6OVs2aNbVlyxa53W7de++9RfuOHz/e6/Oe6gnwF7fbHfBzIjRxraA0uF5QGlwv8JYTrpWSBkgD\nWjIxf/58ValSRc2aNSvaZlmWXC6XJCkuLk65ubnKy8tTQkJC0T5xcXHKy8s7YfuxfQEAAIDyCOgI\n8bx58+RyubR69Wp9+eWX6tOnzwl1wPn5+UpMTFR8fLzy8/NP2J6QkHDC9mP7esuOsglKNeAtrhWU\nBtcLSoPrBd5y8rUS0IT4jTfeKPr/zp07a9CgQRoxYoTWrFmjJk2aKCcnR02bNlW9evU0evRoHT58\nWAUFBdq2bZuSkpLUqFEjLV++XPXq1VNOTk6phvYpmUCw4lpBaXC9oDS4XuAtJ1wrJSX8Aa8h/rM+\nffqof//+GjVqlOrUqaM2bdooIiJCnTt3VmZmpizLUo8ePRQTE6OMjAz16dNHGRkZioqK0siRI+0O\nHwAAACHOtoR42rRpRf8/ffr0k36flpamtLS0E7bFxsbqxRdf9HtsAAAAcA4W5gAAAICjkRADAADA\n0UiIAQAA4GgkxAAAZ1q3TjpwwO4oAAQBEmIAgPMcPSplZEidOklHjtgdDQCbkRADAJzn/feldu2k\na6+V7rlH8njsjgiAjUiIAQDOM2mS1LWr1LOnVL261KOHZFl2RwXAJiTEAABn+eEHac8eqV49c3vo\nUOngQemZZ+yNC4BtSIgBAM4ybZrUpcsft10uacIEaeNG818AjmP70s0AAASMZUkzZ0offHDi9ogI\nafp06e9/l6pUMZPtADgGCTEAwDlWrZIuv1w688yTfxcTI735pnTDDVKlSlKbNoGPD4AtSIgBAM4x\naZJ0772n/n1CgrRggUmKzzxTato0cLEBsA01xAAAZ8jNlTZskJo1K3m/s8+W5s+XHnxQ2rw5MLEB\nsBUJMQDAGWbPltLSzCS606lRw9Qa33GHtGOH30MDYC8SYgCAM0ydKt11l/f7X3qp9Npr0u23m1Zt\nAMIWCTEAIPx98YVUubJ0/vmlu19KijRihHTrrdKvv/onNgC2IyEGAIS/YyvTlcV110m9ekm33WYW\n8AAQdkiIAQDhraBAWrxYateu7Mdo397UE6enS0eP+i42AEGBhBgAEN4WLjRt1KKiynecrl2lq682\n//V4fBMbgKBAQgwACG+TJ0v33OObY/XuLVWvbnoZFxb65pgAbEdCDAAIXzt3SgcOSJdc4rtjZmdL\nF14odelC+QQQJkiIAQDh6/XXpX/8w7fHdLmkAQOkevVMTXFBgW+PDyDgSIgBAOHJ45HmzZM6dPDP\n8fv0MavedeggHTrkn3MACAgSYgBAeFq2TGrSRIqL8985Hn1UuvFG06f4wAH/nQcn+uEHKTVV2rbN\n7kgQJkiIAQDh6bXXyt57uDTuv1/KyJBuvlnKzfX/+SD93/9JSUlmFcHVq+2OBmEg0u4AAADwuX37\npK++kq68MjDnu+suqWJF6aabTJu3M88MzHmdasECacwYKTralKz07m2SY6CMSIgBAOHnjTfMQhou\nV+DO2amTSdDatTNJ8VlnBe7cTpKba0omLrrI3F60yDz327dLPXsG9m+OsEHJBAAgvFiWNH26dOed\ngT/3bbdJTz1lkuIffwz8+Z3g/feltm3/uH3mmaaEYutW6aGHaIWHMiEhBgCEl/XrTZ/gs8+25/zt\n2klDh5rJdrt22RNDOFuwwExiPF5UlPTKK1KNGuZ3eXn2xIaQRUIMAAgvkyYFZjJdSa6/Xho1yky0\n+/Zbe2MJJ0eOSJ99JjVqdPLvXC6pb19TKtOqlfT994GPDyGLhBgAED4OHpRWrpRatrQ7EtOjePx4\n6ZZbpK+/tjua8JCTY57XkuqEMzKk554zI/SbNgUuNoQ0EmIAQPiYN8/U8VYIkre3Jk3MiHX79qbG\nFeVTXLlEcZo1k+bMke6+29QcA6cRJK8YAAD4wOTJvl+qubwaNTKT/Dp2lAYNIjEuK8uSli+XrrnG\nu/2TkkwyPHSo9Oqr/o0NIY+EGAAQHr76ykyuqlXL7khOdsUV0qpVJkl7/HHpqqukkSOl776zO7LQ\nsX69VK+e+Rt765xzpPfekxYvNvXFHo//4kNIIyEGAISHyZOle+6xO4pTi4+XMjNNi7C335YSEqQu\nXaQWLaSJE6Wff7Y7wuD21lvelUv8WWysNGuWSYYzM6VDh3wfG0IeCTEAIPQdPWqSzLIkTHY46yzp\nvvukDz4w5RT5+aYjxU03mUVFaBt2snffldq0Kdt9K1SQhg83Hz6aNzfJNaPFOA4JMYDg88030ksv\n2R0FQsl770nXXSfFxNgdSeldcIH02GOmpGLUKFP60by5lJ5uErfDh+2O0H7btknnnmtG1cvj/vvN\nZLtFi8yExxkzWMgDkkiIAQSjZ581E2FoVQVvBUPvYV9ISpIGDpTcbqlPH2nFCiklRVq2zO7I7FXW\nconiXHih+cC9cKH06afSlVdKr70mFRT45vgISSTEAILLDz9I69ZJU6ZIAwbYHQ1CwZ49Zpnkv/7V\n7kh8x+WSGjaURowwE8L69TOjmU61cKEpKfGl8883z++SJWZy45VXSmPGSAcO+PY8CAkkxACCy5gx\n0iOPSK1bmyRn40a7I0IwsiwzCW3dOik720xOC1fnnWfah82YYRacsCy7IwqsvXtNve955/nn+Ged\nZdrhrVhhylOaNpWGDZN+/dU/50NQIiEGEDx++0165x1TOylJzzwjPfWUvTHBPgcOSJs3m8lyY8ea\nOtvbbjMjecnJUlqa9PLLUvXq0p132h2tf8XHm0Up/vc/6eGHpcJCuyMKnLffNpMN/S0hQerdW1qz\nRkpMNHXc/fpJP/3k/3PDdpF2BwAARSZONG2zjvUZvfJK0zIpJ8e8OSF8WZYpk1myRNq+3bTGOuMM\nU+9Zp45Uu7b5yrx2bZMARzrw7SsyUnrlFTMifvvtZsT4jDPsjsr/FiwwpQ2BEhsrPfSQ1K2b6fjR\nurV07bVSz55mAiTCUsBfUQoLC9WvXz9t375dLpdLgwcPVkxMjJ544gm5XC5dfPHFGjhwoCpUqKA5\nc+Zo1qxZioyM1IMPPqgWLVro0KFD6tWrl37++WfFxcVp+PDhqlKlSqAfBgBfO3zYtJ9aterE7dnZ\npj3Vhx+aukqEn/37pXvvlapWlfr3N0lwbKzdUQUnl8s8R6+/LrVta5aqPuccu6Pyn/x8U9+blBT4\nc0dHm1UPu3Qxz/Ptt0uXXy716iVdemng44FfBbxkYtnvM2VnzZql7t2764UXXtCwYcPUvXt3zZgx\nQ5ZlaenSpdq7d6+mTZumWbNmadKkSRo1apQKCgo0c+ZMJSUlacaMGbr11ls1fvz4QD8EAP4wbZrU\nvr0UF3fi9ksuMT//93/2xOVkDz1kEgJ/fmX8ySemN2x6upn5f9llJMPeuPtu83V+27amJVm4WrSo\n7L2HfSUiwpTnrF4tdeokZWWZjherV9sbF3wq4Alxy5YtNWTIEEnSrl27lJiYqM2bN6tx48aSpObN\nm2vVqlXatGmTGjZsqOjoaCUkJKhmzZrasmWL3G63mjVrVrTvai5IIPQVFkrjx5vayOIMHGhGip1U\nN1mcHTsU9cMPgTnXlClSbq50443S9deb0XtfTuayLDOB8tFHpTfflDp08N2xnaJ1a9Nu7vbbpbVr\n7Y7GP3zZbq28XC7znB/r+jF6tCmlePvt0F/kIzdXkQ6vlbalCCsyMlJ9+vTR4sWL9eKLL2rlypVy\n/f5VaFxcnHJzc5WXl6eE4xpwx8XFKS8v74Ttx/b1htvt9v0DCcJzIjQ5/VqptHSp4i+9VN/t2CHt\n2FHsPhdcdpkOZmdrXyAm1wShxNWrdcGLL+qiqCh9GhcnT3y8384V+7//qdbzz+u/EyfKExuriDFj\ndMG4cYoeP17f9umjgurVy3X8iN9+U60hQ3Tk3HP13ciRsvbvN313USbR2dmq849/aPe99+rXYmrt\nQ/b15ehRXbZypb586KHguz5cLql3b8Xs3Kmqr7+uM3r31o+dOumXNm1kHZsDEUJqP/mkLtm6Vdvv\nvVf7brjB7nBsYdushOHDh+vxxx9XWlqaDh+3Ck9+fr4SExMVHx+v/Pz8E7YnJCScsP3Yvt5ITk72\n7QM4DbfbHfBzIjQ5/lqxLNNmbeZMVa1Z89T7vfCCdN11qv3EE6G5GllZWZaZULRokbRypbZNmaKG\nzz1n+rJGRPj+fLm5pmb7zTfV8LLL/th+7bXSypX6a/fuZjT3scf+mPxYGmvXmvv27y+1b69zfRa4\nw119tf5y++2m3OSBB4o2h/Try4cfSi1bKvnKK+2O5NSSk80I9g8/qPbYsap9//3SXXeZCXnlXVUv\nUBYulCpX1qdTp6rh66+r9vPPm2/sKle2OzKfK+nDYcBLJhYsWKCJEydKkmJjY+VyuXTFFVdozZo1\nkqScnBylpKSoXr16crvdOnz4sHJzc7Vt2zYlJSWpUaNGWr58edG+IfsPHYCxbJl08cVSScmwJFWp\nYur3JkwITFzBID9fysiQvv9eevdd6ZxztP/6602f1F69fH8+yzLJcM+eppb3z66+Wlq5UjpyREpN\nNe2pSnPs0aOlHj3MBKX27X0XN0zy8s47Jol88snw6FW8YEHwlEucTtWqpqxrxQozepyaalpGBqrE\nqaz27zcfTseONd86TZliSnBatHDc6ogBT4hbt26tL774QnfccYe6du2qJ598UgMGDNDYsWPVqVMn\nHTlyRG3atNE555yjzp07KzMzU3fddZd69OihmJgYZWRk6H//+58yMjI0e/ZsPXyqmkMAoeG550zv\nT288+qh5wf7tN//GFAx27DC1u23bmlrb40dj+/WTdu0y9aO+NGGCdOaZUmbmqfeJjjbnnzbNvOE/\n8sjp/x6//GL6B+/YIX3wgWmjBt+rWNG0YjtyxHRGCOWliC3LJGQtWtgdSekkJJgPfevWmcnAN91k\nEuVg9fjjZonw4zuVdOgg/ec/0vDh5vfHfYsf1iwHWLdunSPOidDk6GvF7basv/+9dPeZMMGyBgzw\nTzzBYulSy6pf37LWrDnpV0XXy4EDlvW3v1lWTo5vzvnJJ5bVtKllHTzo/X08HsuaPNmy6tWzrAUL\nit/n448tq0EDy5o/3zdxwjtjxljW9ddbm071dwl2GzZYVnq63VGUX2GhZWVkWNbEiXZHcrLFiy3r\n5pvNv2OrmPeiwkLLGj3asho3tqzPPrMhQN8r6f2WleoA2Gf4cDM6URpdu5oWbD/+6J+Y7HSsrODp\np6X33pN+775TrNhYac4c0wJq+/bynfeXX0zN4/TpZpTRWy6Xacu2eLE0d64pg/j++z8ey6hRZoTp\n3/82I8QInEcekfr3V52nnjIj+Xl5dkdUOqFULlGSChWkyZPNv60lS+yO5g/5+absasKEU/d3r1DB\nfCs3aZLpEz56dOh30ygBCTEAe3z1lUlq//a30t0vKsok0c8845+47HLwoOktu3WrmUB33nmnv88F\nF0ivvmpqq73suHMSyzKrA/bvL110UdmOce655g3/gQfMV8Rjxphk5rvvpKVLzUIbCLxrrtGWSZOk\nGjVM/fe0aaGT0LzzjhQu3Q4qVjQfGHv1kr780u5ojKeekv75T+9W3rviCmn5clOmdcMNf3zoDTMk\nxADs8fzzZvSwLDp2NN0KyjsyGix27pRatjRJy4QJpk7XW1deabo23Hln2fo0jxplElZfTHJr3dpM\nuvv1VzOSP2pU6R4LfC8y0nxQ+fBD07rsmmtKNxnSDjt2mEmCXnaRCglVq5oPjXfcIe3da28sq1ZJ\nmzebUV9vxcSY+R5PPGF6k7/5pv/iswkJMYDA27NHWr9eateubPevUEEaPNgs2BHqcnKkm282rdXu\nu69sx0hPl+rXN6M+pbFypVn4YPjwsp23OGecIQ0YIP397747JsqvcmXzlffEidKgQaY12K5ddkdV\nvGBajMOXLr9cGjbMfKC3a6LaoUOmnObll09dKlGSY90n5s8311AYTXAmIQYQeGPGmBflsrwgH9Oq\nlXlD37TJd3EFkmWZXp9PPWVmdJe2dOTPBg0yZSj/+pd3++/da5Zmnj6dUVwnqVvXlCN07GjKW4YN\nM0lSMFm4MHw/ULVpY5aBvvdee1rjDRliRqnLWh4lmQ9XM2aYx3LNNcG3aEoZkRADOD3LMvWgvvDr\nr6anbqdO5TuOy2XqiEs7KhoMDh82k9jWrTMT0ryp4zudChWkqVNNycXplrT3eExbrqFDT9//GeHH\n5TLJ8OrVpib/qqvMxMdg6F3888/m30e1anZH4j///Kfpqx7odmyffmq+kXrkEd8cLzPTjBR37Ro8\ntdHlQEIM4PQ2bZKSkszX+uWdlDNxonkB9cXypk2amNHNFSvKf6xAKSw0i21ccYWZvV2arg6nExcn\nzZ5taka//fbU+w0dKjVsWPaSFYSHmBhTx//ee9Lbb5sa8M8+szem//zH1KiGu1GjTC337NmBOd+R\nIyYRnzjRtytc1q5tRoszMsxciBBGQgzg9BYtkl580XSF+PvfpZ9+KttxDh2S3njDJMS+kp1tRomD\nYXTrdCzLTICrV0/q3r18JSOnUrOmqQ/s1Mm0VvqzDz4wNYBPP+37cyM0Va1qPpwNGyY9/LD04IMl\nf6Dyp3Bpt3Y6ERHSzJkmMf74Y/+f7/nnzQeNunV9f+y6dc03U+3bmxH+EEVCDOD0Fi0yo4kjRpjR\nx5YtyzYqO22aWQXpjDN8F9tll0l/+YsZWQp2o0ebSSj+ngx41VVmNKhLlxNH9HfvNgn59Omm+wBw\nvJQU042idWvzdXiXLtLnnwfu/AcOmA4Tl14auHPaKSHBtGN74AHzuP1lyxbzQaO0Pd9L46qrzIfs\n224r/oN4CCAhBlCyAwfMevfHavpuusksjPHUU9Kzz3pfQlFYaEYRHnrI9zEOGmRejMvSdixQ3nxT\nev996ZVX/DMy/GedO0sXX/xH8n30qGnNNmqUdP75/j8/QpPLZZKajz4yi6707m26oHz0kf+/hVmy\nxEyWDcS/j2BRs6Z5TUhL80/HhsJC6f77zQReX5SpleSGG0ynnLQ0U6IRYkiIAZTso4+k5s1P3Faj\nhnnz2r/fJMje9NX897+la681k0l8rUYNE+OMGb4/ti+sXGlG1+fM8f+b0vGGDjX13zNnmsT42mul\n664L3PkRulwu02LrnXdMWdLLL5uOAm+95b/FPcK13drpNG5sPnhkZJgPrr700ktm9DY52bfHPZU7\n7zTfIP7jH6GzCMzvSIgBlGzRIjNq82dRUWaE+OGHzQtgTs6pj3FsGd8ePfwXZ9++0siR9vX3PJX/\n/teMis+bF/iFBipUMOURL7xg+j6HYkcO2K9+fVP7P3Wq+SDcuLE0ZYpUUOC7cxQWSp98YibKOlGH\nDmZhHl++Rm7fbv5mge7X3qOHGaTo2TM05nb8joQYQMmWLz95hPh47dqZ+t2BA81IUnFlCx98IF1y\niXmR9JezzjK9VZ96ypR5BIMffzSLZkybJlWvbk8MCQlmlG/OHJMgA2VVu7Y0dqxpm7hjh1klceTI\nsi8bfrxVq6SmTZ19jfbta57LcePKfyzLMrXJY8ZIsbHlP15pDR1qSkB8ueiPnzn4ygNwWrt2SZUq\nnX4SXPXqpp/uwYMmQf7hhxN//9xz5itBf+vZUzr7bPPGOmDAyXEEUn6+mXU9YoT017/aF4dknpOE\nBHtjQPg45xyzUuTKlWZyZrNm5oNoef69OaW7RElcLtMWbf5886GjPKZMMa0yU1N9E1tpHXssH39s\nOpiEABJiAKe2ZImZce6NyEizUEbPnuY+y5aZ7W63GaG47DL/xXlMxYrSE0+YBS8uushMBurWLfBN\n4wsLzWpQ990nXX99YM8NBEp8vPToo6bU4dJLpdtvN3XG2dlmm7c1pJYlLV1KfbtkekPPmWM+YCxe\nbAYlSltXvGuXaZM5dKh/YvRWZKSZv/DGG+YDT5Cj7w6AU1u0yDTuL43Wrc2iE507m7rizz7zb7uf\n4kRHS3fdZdpGLV5satqiosxjad7cv7PYLcusBJWcbM4PhLuoKPPvvXNn06N88WIzmWv9eunyy80S\nv61bn3r1uc2bzWimLxepCWVnn20W7BgxwpQ8/Pij+ZBdoYIZnT///JN/qlWTzjvPvPY99JD5Vi4Y\nvhWKjTUj3m3amAnVJZXf2YyEGEDxPB7ToaBevdLft1o102Ls6adNPe9VV/k+Pm+4XOaNuHVraeNG\nM7Gvb1+TsHbo4J9evM8/byb29evn+2MDwe7ss023hIwM8+Hws8/Ma0GXLmbZ9muvNclRs2ZmNFQy\no4e33GJr2EHn4otNO7bjFRaajj67d5ufXbvMh4klS8ztPXvM4kdXX+39N3uBUKmS+RvfeKMp5ahf\n3+6IikVCDKB4x5Lhsk5yiYwMrtXQ6tc3M66/+85MDHr2WTOKfO+9vhtJmT3blIq89ZazeqkCxXG5\nzGtIvXpSr16mrv7DD6WFC82cgvPOM8nxv/9tkjqULCLCPGfnnWeWXg8l559vXh87djQjxnXq2B3R\nSaghBlC8RYuCa5TBV6pXNzOfP/rIvGE3a2benLduLV+LoI8+MivRzZ4d2F7DQKiIizOjhC++aMop\nxo83ZRLp6VLlynZHB3+7+GJp8mSTFNs54fkUGCEGULxFi6R//cvuKPwnIUHq3t30UX7zTVNK8dVX\n0gUXmF6oTZqYfqtnnXX6Y335pZSVZdqbBUPdHhAKLrzQrKIG52jUyNRG33ab9N57ge/NXgISYgAn\n+/NyzeEsMtKMUKWnm9vffSetWWNKH4YPN3WPV1zxR5Jcv76ZuHLMnj1SZqaZSe2E5wsAyuO666T+\n/aWdO82kyyBBQgz82ZAh0t13+3cRiWCXk2PaJzlR9erm5/bbze2jR83ElTVrzPK1Gzear3lTUswI\n8ksvmcl6QfTCDgBB7YYb7I7gJCTEwPHy86XXXzfL7E6c6NxlRBcvDs/64bKIjDSjwvXrm77CklmB\nad06kyT37Su1aGFvjACAcmFSHXC8Tz81ieBbb5nWXDNn2h2RPXJyzGQzFC8x0Xzt17evdNNNdkcD\nACgnEmLgeJ98Yr4Gr1XLrJw0e7ZZAtjbFZfCgbfLNQMAECZIiIHjrV0rXXml+f/4eFM6cfiw1KmT\nmWjmBJRLAAAchoQYON6XX0qXXfbH7YgI02ngxhulVq2k77+3L7ZACdf+wwAAnAIJMXDMzz+bUoGI\niJN/d/fdfyTG69YFPLSA8XjMUqt//avdkQAAEDAkxMAx69b9US5RnNRUs8ToP/8pzZkTuLgCaePG\n8i3XDABACOJdDzhm7Vozoa4ktWtLS5ZI06ZJgweXb6nfYES5BADAgUiIgWM++aTkEeJjEhOlBQuk\n3FwpI0M6eND/sQXK4sWmVhoAAAchIQYkM9K7Y4dpt+aNiAjp+edN8tiqlWlVFuoOHDDLFJ9/vt2R\nAAAQUCTEgCR9951ZqtnlKt39unaVnnlGatdOWr/eP7EFipOXawYAOBpLNwOSd/XDp3LNNdL8+VK3\nbmaEtVEjqWlT83PppaEzQW3RIqltW7ujAAAg4EiIAcnUDzdvXvb716ljVrY7dEjasEH6+GPp6ael\nLVukc8+VmjQxCXKTJtLZZ/subl/KyTGj3QAAOAwJMSCZEeKePct/nIoV/xgdPmbPHmnNGmnFClN3\nvH+/dMUVf+x39Gj5z1te338vVakixcbaHQkAAAFHQgx4PNK+fdI55/jn+OedJ91yi/mRTAK8ebMZ\nRR43TnVzcqQnn5Tuuaf0Ncy+wnLNAAAHC5HiRsCPtm6VLrkkcOeLjJTq15fuv1+aMkVbpkyRNm2S\n2rSRtm0LXBzHW7SIdmsAAMciIQa87T/sJ564OGnMGLPQR3q6NGJEYMsoPB7p889ZrhkA4FgkxEB5\nOkz40lVXmTrjAwfMBL8NGwJz3o0bzYh1qHTDAADAx3gHBNavN63SgkFMjDRwoPTqq9Ijj0h9+/p/\nJTyWawYAOFxAE+IjR46oV69eyszMVIcOHbR06VJ98803ysjIUGZmpgYOHCiPxyNJmjNnjtq3b6+0\ntDQtW7ZMknTo0CFlZWUpMzNT3bp10759+wIZPsJRQYH5iY+3O5ITXX65tGyZVK2alJoqLV/uv3Mt\nXiy1bOm/4wMAEOQCmhAvXLhQlSpV0owZM/Taa69pyJAhGjZsmLp3764ZM2bIsiwtXbpUe/fu1bRp\n0zRr1ixNmjRJo0aNUkFBgWbOnKmkpCTNmDFDt956q8aPHx/I8BGONm2S6tWzO4riRURIWVlm0Y/n\nnjOT8Pbv9+058vOl335juWYAgKMFNCFu27atHn30UUmSZVmKiIjQ5s2b1fj3+s3mzZtr1apV2rRp\nkxo2bKjo6GglJCSoZs2a2rJli9xut5o1a1a07+rVqwMZPsJRsNQPl6RWLentt01d8TXXSAsW+O7Y\nLNcMAEAUnj1OAAAgAElEQVRg+xDHxcVJkvLy8vTII4+oe/fuGj58uFy/916Ni4tTbm6u8vLylJCQ\ncML98vLyTth+bF9vud1uHz6S4D0nSqfWe+9pb1qaDtj8t/LqWrn0UkWOHKnqo0apwrhx+rZXLx0t\n56p31adN069XX61crtWQwmsLSoPrBd5y8rUS8IU5du/erYceekiZmZm6+eabNWLEiKLf5efnKzEx\nUfHx8crPzz9he0JCwgnbj+3rreTkZN89CC+43e6AnxNl8P33OjstTYqOti2EUl8rLVtK77yjyr17\nSy+9ZGqMy2rrVlWdNIkV6kIIry0oDa4XeMsJ10pJCX9ASyZ++ukn3XPPPerVq5c6dOggSapbt67W\nrFkjScrJyVFKSorq1asnt9utw4cPKzc3V9u2bVNSUpIaNWqk5b9PLsrJyQn7Pxz8LDfXLLVsYzJc\nZu3aSe+8I/XqJb3xRtmO8d130llnkQwDABwvoCPEL7/8sn777TeNHz++aELcU089pezsbI0aNUp1\n6tRRmzZtFBERoc6dOyszM1OWZalHjx6KiYlRRkaG+vTpo4yMDEVFRWnkyJGBDB/hxu2WQvlD1QUX\nmA4Rd94p/e9/pl1baZZ+XrKEdmsAACjACXG/fv3Ur1+/k7ZPnz79pG1paWlKS0s7YVtsbKxefPFF\nv8UHh7F5hTqfiI+X5s2Tevc2ifGkSWbU2xuLFklPPOHf+AAACAEszAHnCoUOE96IiJBGjpSaNZPa\ntpX27j39fViuGQCAIiTEcK7//le6+GK7o/CdBx6QnnxSatNG2rKl5H03bJAaNChdiQUAAGGKhBjO\n9OOP0jnnSBXC7J9A69bStGlSRoa0dOmp92O5ZgAAioRZNgB4KRzqh0/l8sul996TBg+WXnut+H1Y\nrhkAgCIkxHCmcKkfPpWqVaX33zeJb58+pmb4mPx803LuvPPsiw8AgCBCQgxnCucR4mNiY6WZM6Wo\nKKljR+nAAbN9+XKWawYA4Dgltl375JNPSrzzleGeUCA8WZZZlOKCC+yOxP8qVJCys6WpU6VWraQ3\n3zSjxu3a2R0ZAABBo8SEuKSevy6XS//61798HhDgdzt2SLVrO6vDwl13SRdeKN1wg3TokDR0qN0R\nAQAQNEpMiKdNmxaoOIDACff64VO55hppzhxpwQKWawYA4DherVS3bt06TZo0SQcOHJBlWfJ4PNq1\na5c++OADf8cH+N4nnzi35VhSklnVDgAAFPFqUl2/fv3UsmVLFRYW6o477lCtWrXUkpZNCFWffCKl\npNgdBQAACBJeJcQVK1bU7bffrsaNGysxMVHZ2dmnnXAHBKWjR6XffpOqVLE7EgAAECS8SohjYmK0\nf/9+1a5dWxs3bpTL5dKBYy2cgFDy5ZdS3bp2RwEAAIKIVwnx3XffrR49eqhFixZasGCBbrzxRl1x\nxRX+jg3wPSf0HwYAAKXi1aS6v/3tb2rbtq1cLpfmz5+vHTt2KCEhwd+xAb63dq3UpYvdUQAAgCBS\n4gjx7t27tWvXLt1xxx3as2ePdu3apf379yshIUHdunULVIyA73z6qdSggd1RAACAIHLahTnWrFmj\nH3/8UXfccccfd4qM1LXXXuvv2ADfOnTIrFJ3xhl2RwIAAIJIiQnxsGHDJEmvvPKK7rvvvoAEBPjN\nhg2MDgMAgJOUmBDPnj1bnTp1UkFBgcaNG3fS7x9++GG/BQb4nFNXqAMAACUqsYbYsqxAxYFQcuSI\nlJdn/htK1wgdJgAAQDFKHCFOT0+XZEaCf/75Z7ndbkVERCglJUVnnnlmQAJEEGrXTiookA4fNgtd\n/Dkpdrn+2BYVJcXEmJ8zzpAefVRq0SLwMUvS5s3S5Zfbc24AABC0vGq7tnDhQg0fPlzJyckqLCzU\noEGDlJ2drWuuucbf8SHYbNokxcVJixeffl/LMqPIhw+bnx9/lHr1kmbNkp57Tgrkh6r9+6X4eCnS\nq0seAAA4iFfZwfjx4zV//nxVrVpVkvT999/rgQceICF2ogkTpAcf9G5fl0uKjjY/CQnS2WdLb78t\nTZ8uNW8uPfOMdNNN/o33mHXrpJSUwJwLAACEFK9WqouPj9c555xTdPuCCy5QVFSU34JCkPrtN+nj\nj6VWrcp+DJdL6txZWrRI+te/pDvukPbu9V2Mp0L9MAAAOAWvEuKkpCR169ZN77zzjt5//311795d\n5557rhYsWKAFCxb4O0YEi+nTpTvvlCp4ddmUrGpVac4cqUMHqWVLU0bhzwl6dJgAAACn4FVmY1mW\nzj33XH300Uf68MMPFRsbq8qVK2vNmjVas2aNv2NEMLAsacoU6e67fXvc226TPvzQjBjfeqv0/fe+\nPf4xX38t1anjn2MDAICQ5lUN8bEFOo536NAhVaxY0ecBIUh99JHp0HDWWb4/duXK0uTJZqLejTdK\nDz0k3XuvKa/whV27pPPP993xAABAWPEqIX7//ff10ksv6cCBA7IsSx6PRwcPHtTHH3/s7/gQLCZM\nkHr08O85WrWSVqyQnnpKat1amjjRN6O61A8DAIASeJUQjxgxQtnZ2ZoyZYoeeOABrVixQr/88ou/\nY0Ow2LNH+uabwCSV8fHSmDHSypVSWpqZdPfII1JERNmPuXat1LSp72IEAABhxasa4sTERDVt2lT1\n69dXbm6usrKytGHDBn/HhmAxaZLUtWtgSw6uvtqMFv/0k3TttdLWrWU/FiPEAACgBF4lxBUrVtT2\n7dt10UUXae3atSooKFBubq6/Y0MwKCw03SAyMgJ/7ooVTa/iMWNMd4uXXip9JwrLkn74QTrvPP/E\nCAAAQp5XCXGPHj00ZMgQtWjRQh9//LEaN26sli1b+js2BIP//Ee67jqz7LJdGjWScnKkr74yy0bv\n2uX9fb/6SvrLX/wXGwAACHleJcRffvml9u3bp+joaI0ePVpVq1ZVrVq1/B0bvPXKK9KqVf459oQJ\n0gMP+OfYpREbK73wgvT449INN5hRa2/QfxgAAJyGVwnxnDlzNHPmTElS9erVtWDBAr3xxht+DQyl\n8MYb0sMPSwcP+va4X31lSiYuucS3xy2P66+Xli+XFi40ZRT795e8P/XDAADgNLxKiI8cOXLCUs0s\n2xxEPB7p11/NpLfBg3177JdfDo7R4T+rVMmsmnfzzWbC3QcfnHrfdeuk5OSAhQYAAEKPV23XWrZs\nqbvuuks33HCDJGnRokW6/vrr/RoYvHSsRvbBB02tr9vtmwTw4EGzetyzz5b/WP7SqZOUmmo+DPzf\n/0lDh5rSimOOHJEOHJDOPNO+GAEAQNDzaoS4V69e6ty5s7Zv366dO3eqS5cu6t69u79jgzfWrzcJ\ncIUKZiGLhx4yiWB5zZkjdeggRXr1mck+F1wgvfuu+VDQvLn06ad//O7zz6W//tW+2AAAQEjwOttp\n27at2rZt689YUBZut3Ss48cll0i33CI995xZ7a08XnlFmju3/PEFgstlPghcf70ZLb7xRql3b+qH\nAQCAV7waIUYQW7/etCU75vHHpbfflr78suzHXLdOqlbN/ISSSy+VPvxQOnzYJMcLFtBhAgAAnBYJ\ncSizLLOS2znn/LEtKsosYPHAA6ZDRFlMmCD985++iTHQoqLM5MLnnpMKCqT69e2OCAAABDkS4lC2\nfbtUu/bJ2xs1kv72N2n8+NIf85dfpI0bTfeGUNakibRkiRQTY3ckAAAgyNmSEG/cuFGdO3eWJH3z\nzTfKyMhQZmamBg4cKI/HI8n0Pm7fvr3S0tK0bNkySdKhQ4eUlZWlzMxMdevWTfv27bMj/ODx53KJ\n4w0YIL3+urRjR+mOOXWq1KWLqcsFAABwgIAnxK+++qr69eunw4cPS5KGDRum7t27a8aMGbIsS0uX\nLtXevXs1bdo0zZo1S5MmTdKoUaNUUFCgmTNnKikpSTNmzNCtt96q8WUZAQ0nxzpMFCc2Vho92rRj\nsyzvjufxSP/6l0mIAQAAHCLgCXHNmjU1duzYotubN29W498nPjVv3lyrVq3Spk2b1LBhQ0VHRysh\nIUE1a9bUli1b5Ha71axZs6J9V69eHejwg4vbfeoRYklq1kyqU8eM+nrjgw+klBSz8AUAAIBDBDwh\nbtOmjSKP621rWZZcv389HxcXp9zcXOXl5SkhIaFon7i4OOXl5Z2w/di+jmVZ0u7d0vnnl7zfsGFm\npHjPntMfM5Qn0wEAAJSR7asuVKjwR06en5+vxMRExcfHKz8//4TtCQkJJ2w/tq+33G6374IOgnNG\n7dmjmmeeqW1enCPxnnt09h136Ovnnjv18X74QbW//lr/LSw0I88IKDuuT4QurheUBtcLvOXka8X2\nhLhu3bpas2aNmjRpopycHDVt2lT16tXT6NGjdfjwYRUUFGjbtm1KSkpSo0aNtHz5ctWrV085OTlK\nLsUSxaXZ1xfcbrd/z7lggdSihXfnSE6W1q1T8o4d0u23F7/PwIHSY48F/HlCAK4VhBWuF5QG1wu8\n5YRrpaSE3/aEuE+fPurfv79GjRqlOnXqqE2bNoqIiFDnzp2VmZkpy7LUo0cPxcTEKCMjQ3369FFG\nRoaioqI0cuRIu8O3T0kT6orzwgvSddeZn8qVT/zdkSPSv/8trV3r2xgBAABCgC0JcfXq1TVnzhxJ\nUu3atTV9+vST9klLS1NaWtoJ22JjY/Xiiy8GJMagt3691K2b9/ufdZZZzrlnT2ny5BN/99Zb0g03\nSBUr+jZGAACAEMDCHKFq506pevXS3adjR2nfPmnx4hO3v/yydP/9vosNAAAghJAQh6Jj3SVKu3iG\ny2VWr+vdW8rLM9u+/FKKjjbt2QAAAByIhDgUlbRC3elUqyY99JApn5BotQYAAByPhDgUnW5BjtPp\n2lX64gtTOpGTY+qHAQAAHIqEOBSVtsPEn7lcpm44PV3q1EmKiPBdbAAAACHG9rZrKIPt26ULLyzf\nMS66SJo5U7rySp+EBAAAEKpIiEPN3r3S2WeXfkJdcVq3Lv8xAAAAQhwlE6GmvOUSAAAAOAEJcagp\nT4cJAAAAnISEONS43YwQAwAA+BAJcaj56iszIQ4AAAA+QUIcSn75RapUSarAnw0AAMBXyKxCCfXD\nAAAAPkdCHEpIiAEAAHyOhDiUlHfJZgAAAJyEhDiUbN0qXXKJ3VEAAACEFRLiUPHbb1JcnBQRYXck\nAAAAYYWEOFR8+qnUsKHdUQAAAIQdEuJQwZLNAAAAfkFCHCroMAEAAOAXJMSh4osvpLp17Y4CAAAg\n7JAQh4L8fCk6WoqMtDsSAACAsENCHAo2bpQaNLA7CgAAgLBEQhwK3G4m1AEAAPgJCXEoYEIdAACA\n35AQh4LPP5cuv9zuKAAAAMISCXGwO3hQqlBBiomxOxIAAICwREIc7D77TKpXz+4oAAAAwhYJcbCj\nfhgAAMCvSIiDHR0mAAAA/IqEONht2iT99a92RwEAABC2SIiDWUGB5PFIsbF2RwIAABC2SIiD2eef\nS1dcYXcUAAAAYY2EOJgxoQ4AAMDvSIiD2fr1TKgDAADwMxLiYLZhg1S/vt1RAAAAhDUS4mB15Ih0\n+LAUF2d3JAAAAGGNhDhYbdki1a1rdxQAAABhj4Q4WLndTKgDAAAIABLiYEWHCQAAgIAgIQ5Wn34q\nNWxodxQAAABhj4Q4GBUWSnl5UmKi3ZEAAACEvUi7Aygtj8ejQYMGaevWrYqOjlZ2drZq1apld1i+\n9d//SpdcYncUAAAAjhByI8RLlixRQUGBZs+erZ49e+rZZ5+1OyTfY0EOAACAgAm5hNjtdqtZs2aS\npAYNGujzzz+3OSI/oMMEAABAwIRcyUReXp7i4+OLbkdEROjo0aOKjCz5objdbn+H5rNzJi1frm03\n36xCG2KGPey4PhG6uF5QGlwv8JaTr5WQS4jj4+OVn59fdNvj8Zw2GZak5ACXILjd7rKd0+ORPB41\naNHC90EhKJX5WoEjcb2gNLhe4C0nXCslJfwhVzLRqFEj5eTkSJI2bNigpKQkmyPysW3bpIsusjsK\nAAAAxwi5EeJWrVpp5cqVSk9Pl2VZGjp0qN0h+RYT6gAAAAIq5BLiChUq6Omnn7Y7DP9Zv1667jq7\nowAAAHCMkCuZCHt0mAAAAAgoEuJgYlnSTz9J55xjdyQAAACOQUIcTHbskC680O4oAAAAHIWEOJis\nX0+5BAAAQICREAeTjz6SGje2OwoAAABHISEOFrm50rJlUsuWdkcCAADgKCTEwWLKFOmuuyQvVt0D\nAACA75B9BYPCQmnyZGn5crsjAQAAcBxGiIPBW2+ZxTjOPNPuSAAAAByHEeJgMGaMNHWq3VEAAAA4\nEiPEdluzRqpalf7DAAAANiEhttsLL0iPPWZ3FAAAAI5FQmynb76Rdu2Smja1OxIAAADHIiG209ix\n0iOP2B0FAACAo5EQ2+W336QlS6Rbb7U7EgAAAEcjIbbL5MnS3XezEAcAAIDNyMbscPSo9PrrUk6O\n3ZEAAAA4HiPEdliwQGrZUkpMtDsSAAAAx2OE2A4vvihNm2Z3FAAAABAjxIG3erVUrZpUq5bdkQAA\nAEAkxIHHQhwAAABBhYQ4kHbskH74QWrc2O5IAAAA8DsS4kB68UXp0UftjgIAAADHISEOlF9/lZYt\nk265xe5IAAAAcBwS4kCZNEn6xz+kiAi7IwEAAMBxaLsWCEePSlOnSitW2B0JAAAA/oQR4kCYP19q\n00ZKSLA7EgAAAPwJI8T+ZllmMt3MmXZHAgAAgGIwQuxvq1dLNWtKNWrYHQkAAACKQULsb6NGsRAH\nAABAECMh9qevv5Z+/llKSbE7EgAAAJwCCbE/sRAHAABA0CMh9pOI3Fxp+XLp5pvtDgUAAAAlICH2\nk7MXLJC6dmUhDgAAgCBH2zV/OHJEVd55R1q/3u5IAAAAcBqMEPvDwoX67W9/k+Lj7Y4EAAAAp8EI\nsT80a6bd556r8+yOAwAAAKfFCLE/nHuuPGecYXcUAAAA8AIJMQAAAByNhBgAAACORkIMAAAAR7Ml\nIV68eLF69uxZdHvDhg3q2LGj0tPTNW7cuKLt48aNU4cOHZSenq5NmzZJkvbt26d77rlHmZmZ6t69\nuw4ePBjw+AEAABA+Ap4QZ2dna+TIkfJ4PEXbBg4cqJEjR2rmzJnauHGjvvjiC23evFlr167V3Llz\nNWrUKA0ePFiSNH78eN10002aMWOG6tatq9mzZwf6IQAAACCMBDwhbtSokQYNGlR0Oy8vTwUFBapZ\ns6ZcLpdSU1O1atUqud1upaamyuVyqVq1aiosLNS+ffvkdrvVrFkzSVLz5s21atWqQD8EAAAAhBG/\n9SGeO3eupk6desK2oUOHql27dlqzZk3Rtry8PMUft4BFXFycdu7cqZiYGFWqVOmE7bm5ucrLy1NC\nQsIJ27zhdrvL83DKxI5zIjRxraA0uF5QGlwv8JaTrxW/JcQdO3ZUx44dT7tffHy88vPzi27n5+cr\nMTFRUVFRJ21PSEgo2r9ixYpF+3ojOTm59A+iHNxud8DPidDEtYLS4HpBaXC9wFtOuFZKSvht7zIR\nHx+vqKgoffvtt7IsSytWrFBKSooaNWqkFStWyOPxaNeuXfJ4PKpSpYoaNWqk5cuXS5JycnLC/o8H\nAAAA/3JZlmUF+qRr1qzRrFmz9MILL0gyXSaGDh2qwsJCpaamqkePHpKksWPHKicnRx6PR3379lVK\nSop++ukn9enTR/n5+apcubJGjhypM06zKpyTvwIAAACAcaqBVFsSYgAAACBY2F4yAQAAANiJhBgA\nAACORkIMAAAARyMhBgAAgKOREAMAAMDRSIgBAADgaH5bqc6JPB6PBg0apK1btyo6OlrZ2dmqVauW\n3WEhCG3cuFHPP/+8pk2bpm+++UZPPPGEXC6XLr74Yg0cOFAVKvBZFdKRI0f05JNP6vvvv1dBQYEe\nfPBB/eUvf+F6wUkKCwvVr18/bd++XS6XS4MHD1ZMTAzXCkr0888/q3379po8ebIiIyMdfb0455EG\nwJIlS1RQUKDZs2erZ8+eevbZZ+0OCUHo1VdfVb9+/XT48GFJ0rBhw9S9e3fNmDFDlmVp6dKlNkeI\nYLFw4UJVqlRJM2bM0GuvvaYhQ4ZwvaBYy5YtkyTNmjVL3bt31wsvvMC1ghIdOXJEAwYMUMWKFSXx\nXkRC7ENut1vNmjWTJDVo0ECff/65zREhGNWsWVNjx44tur1582Y1btxYktS8eXOtWrXKrtAQZNq2\nbatHH31UkmRZliIiIrheUKyWLVtqyJAhkqRdu3YpMTGRawUlGj58uNLT03XuuedK4r2IhNiH8vLy\nFB8fX3Q7IiJCR48etTEiBKM2bdooMvKPaiXLsuRyuSRJcXFxys3NtSs0BJm4uDjFx8crLy9Pjzzy\niLp37871glOKjIxUnz59NGTIEN18881cKzil+fPnq0qVKkWDeBLvRSTEPhQfH6/8/Pyi2x6P54TE\nByjO8TVa+fn5SkxMtDEaBJvdu3erS5cuuuWWW3TzzTdzvaBEw4cP1/vvv6/+/fsXlWVJXCs40bx5\n87Rq1Sp17txZX375pfr06aN9+/YV/d6J1wsJsQ81atRIOTk5kqQNGzYoKSnJ5ogQCurWras1a9ZI\nknJycpSSkmJzRAgWP/30k+655x716tVLHTp0kMT1guItWLBAEydOlCTFxsbK5XLpiiuu4FpBsd54\n4w1Nnz5d06ZN02WXXabhw4erefPmjr5eXJZlWXYHES6OdZn473//K8uyNHToUF100UV2h4Ug9N13\n3+mxxx7TnDlztH37dvXv319HjhxRnTp1lJ2drYiICLtDRBDIzs7Wu+++qzp16hRte+qpp5Sdnc31\nghMcOHBAffv21U8//aSjR4+qW7duuuiii3htwWl17txZgwYNUoUKFRx9vZAQAwAAwNEomQAAAICj\nkRADAADA0UiIAQAA4GgkxAAAAHA0EmIAAAA4GgkxAAAAHI2EGAAAAI5GQgwAAABHIyEGAACAo5EQ\nAwAAwNFIiAEAAOBoJMQAAABwNBJiAAAAOFqk3QGUlsfj0aBBg7R161ZFR0crOztbtWrVsjssAAAA\nhKiQGyFesmSJCgoKNHv2bPXs2VPPPvus3SEBAAAghIVcQux2u9WsWTNJUoMGDfT555/bHBEAAABC\nWcglxHl5eYqPjy+6HRERoaNHj9oYEQAAAEJZyNUQx8fHKz8/v+i2x+NRZGTJD8Ptdvs7LAAAAAS5\n5OTkYreHXELcqFEjLVu2TO3atdOGDRuUlJTk1f1O9QT4i2uwy+t9rYFWue9XFoE8V1mF8/Po7/vZ\n9XwE+nyBfP6D9W99/P1CIcay3i8UruNwfh6J0Tf3I8aT7xcoJQ2QhlxC3KpVK61cuVLp6emyLEtD\nhw61OyQAAACEsJBLiCtUqKCnn37a7jAAAAAQJkJuUh0AAADgSyTEAAAAcDQSYgAAADgaCTEAAAAc\njYQYAAAAjkZCDAAAAEcjIQYAAICjkRADAADA0UJuYQ4AgDPZtYQ8gPDHCDEAAAAcjYQYAAAAjkZC\nDAAAAEcjIQYAAICjkRADAADA0UiIAQAA4Gi0XQMABBwt1AAEE0aIAQAA4GgkxAAAAHA0EmIAAAA4\nGgkxAAAAHI1JdQAAJrkBcDRGiAEAAOBoJMQAAABwNBJiAAAAOBoJMQAAAByNhBgAAACORpcJAAhS\nxXV+cLvdSk5OtiEaAAhfjBADAADA0WxPiHNzc/XAAw/ozjvvVKdOnfTpp59KkjZs2KCOHTsqPT1d\n48aNK9p/3Lhx6tChg9LT07Vp0ya7wgYAAECYsL1kYsqUKWratKnuvvtuff311+rZs6f+/e9/a+DA\ngRo7dqxq1Kih++67T1988YUsy9LatWs1d+5c7d69W1lZWZo3b57dDwEAAAAhzPaE+O6771Z0dLQk\nqbCwUDExMcrLy1NBQYFq1qwpSUpNTdWqVasUHR2t1NRUuVwuVatWTYWFhdq3b5+qVKli50OAH7F6\nFgAA8LeAJsRz587V1KlTT9g2dOhQ1atXT3v37lWvXr305JNPKi8vT/Hx8UX7xMXFaefOnYqJiVGl\nSpVO2J6bmxtWCTEJIAAAQGAFNCHu2LGjOnbseNL2rVu36rHHHlPv3r3VuHFj5eXlKT8/v+j3+fn5\nSkxMVFRU1EnbExISvDq32+0u/wPwk2CO7ZhQiLGsAvnYynqustwvkOcqD57/0t/PV89ZOP+tAy3Y\nrhFf3Y8Y7b0fMQaO7SUTX331lR599FGNHj1al156qSQpPj5eUVFR+vbbb1WjRg2tWLFCDz/8sCIi\nIjRixAh17dpVe/bskcfj8Xp0OOBtit72flfbWiiFQoxlFcjHVtZz+fl+PjlXWYXr8x/ov3UxTtt2\nLZz/1oEWCtcIMdoXY1nvR4wn3y9ASkrCbU+IR44cqYKCAj3zzDOSTDI8YcIEDR48WI8//rgKCwuV\nmpqq+vXrS5JSUlLUqVMneTweDRgwwM7QAZwCpT8AgFBie0I8YcKEYrc3aNBAc+bMOWl7VlaWsrKy\n/B0WAAAAHML2PsQAAACAnUiIAQAA4Gi2l0wAoY56WQAAQhsjxAAAAHA0EmIAAAA4GgkxAAAAHI2E\nGAAAAI5GQgwAAABHIyEGAACAo5EQAwAAwNFIiAEAAOBoJMQAAABwNBJiAAAAOBpLNwM2KW7JZ7fb\nreTkZBuiAQDAuRghBgAAgKMxQgwAQDGK+xYHQHhihBgAAACOxggxAKDMGEUFEA4YIQYAAICjkRAD\nAADA0UiIAQAA4GgkxAAAAHA0EmIAAAA4GgkxAAAAHI2EGAAAAI5GQgwAAABHIyEGAACAo5EQAwAA\nwNGCJiHetm2bkpOTdfjwYUnShg0b1LFjR6Wnp2vcuHFF+40bN04dOnRQenq6Nm3aZFe4AAAACBOR\ndgcgSXl5eRo+fLiio6OLtg0cOFBjx45VjRo1dN999+mLL76QZVlau3at5s6dq927dysrK0vz5s2z\nMUPWwj0AACAASURBVHIEK2ugZXcIAAAgRNg+QmxZlvr376/HHntMsbGxkkyCXFBQoJo1a8rlcik1\nNVWrVq2S2+1WamqqXC6XqlWrpsLCQu3bt8/mRwAAAIBQFtAR4rlz52rq1KknbKtWrZratWunSy+9\ntGhbXl6e4uPji27HxcVp586diomJUaVKlU7YnpubqypVqvg/eAAoI76xAEqHfzMItIAmxB07dlTH\njh1P2NaqVSvNmzdP8+bN0969e3XPPfdo4sSJys/PL9onPz9fiYmJioqKOml7QkKCV+d2u92+eRB+\nEMyxHRMKMYYLXz3XZT1OOP+tA/mc+PN5tPsagW8E+t9oIK/jUHj9CYXHRoyBY3sN8eLFi4v+/7rr\nrtPkyZMVExOjqKgoffvtt6pRo4ZWrFihhx9+WBERERoxYoS6du2qPXv2yOPxeD06nJyc7K+HULy3\nvd814LEdEwoxOozb7T79c+3l3+2E44Tz37qsj60s9wuC5/G010gQxOhogbwey3q/UIixrELhsRHj\nyfcLkJKScNsT4lMZPHiwHn/8cRUWFio1NVX169eXJKWkpKhTp07yeDwaMGCAzVECAAAg1AVVQvzB\nBx8U/X+DBg00Z86ck/bJyspSVlZWIMMCAABAGLO9ywQAAABgJxJiAAAAOFpQlUwgsGhrAwAAwAgx\nAAAAHI6EGAAAAI5GQgwAAABHIyEGAACAo5EQAwAAwNFIiAEAAOBoJMQAAABwNPoQAyGG/tEAAPgW\nI8QAAABwNBJiAAAAOBoJMQAAAByNhBgAAACOxqQ6AAgjTLoEgNJjhBgAAACORkIMAAAARyMhBgAA\ngKNRQwwgpFEzCwAoL0aIAQAA4GgkxAAAAHA0EmIAAAA4GgkxAAAAHI2EGAAAAI5GQgwAAABHIyEG\nAACAo5EQAwAAwNFsX5ijsLBQw4YN0+eff66CggJlZWWpRYsW2rBhg5555hlFREQoNTVVDz/8sCRp\n3Lhx+vDDDxUZGaknn3xS9erVs/kRAABgsFAMEJpsT4jfeustHT16VLNmzdIPP/ygd999V5I0cOBA\njR07VjVq1NB9992nL774QpZlae3atZo7d652796trKwszZs3z+ZHAAAAgFBme0K8YsUKXXzxxbrv\nvvtkWZb69++vvLw8FRQUqGbNmpKk1NRUrVq1StHR0UpNTZXL5VK1atVUWFioffv2qUqVKjY/CgAA\nAISqgCbEc+fO1dSpU0/YVrlyZcXExGjixIn65JNP1LdvX40cOVLx8fFF+8TFxWnnzp2KiYlRpUqV\nTtiem5vrVULsdrt990B8LJhjQ+DZfT3Yff5gVJbnxJ/PI38jZyvr3z+Q13Gg7xfIc/H823cufwpo\nQtyxY0d17NjxhG09evTQtddeK5fLpcaNG2vHjh2Kj49Xfn5+0T75+flKTExUVFTUSdsTEhK8Ondy\ncrJvHoS33vZ+14DHhqDldrv9cz1wPZ6sLM9JEDyPfrtGYK+yXluBvI4Dfb+yCIXHRown3y9ASkrC\nbe8ykZycrOXLl0uStmzZovPPP1/x8fGKiorSt99+K8uytGLFCqWkpKhRo0ZasWKFPB6Pdu3aJY/H\nQ7kEAAAAysX2GuK0tDQNHDhQaWlpsixLgwcPliQNHjxYjz/+uAoLC5Wamqr69etLklJSUtSpUyd5\nPB4NGDDAztABAAAQBmxPiKOjozVs2LCTtjdo0EBz5sw5aXtW1v+zd+9hUlZ3nsC/LTexaYYQL0+M\nA15WNzquOjQbxw0SR2NMGF2vLaij+8RL1B3xGh/jDSEQ1DWYTbxlYxx1XC+A8XHiZCeOOiqjKGrN\noisGY4wSCYnXMdItitC1f+SxJyhy7e7qqvP5/NV13qr3/H5Vp7u/vJyumpiJEyf2RmkAABSg5lsm\nAACglgRiAACKJhADAFC0mu8hBgDoDj46mw3lCjEAAEUTiAEAKJotE0CR/NcqAB9yhRgAgKKt0xXi\nX/ziF/nVr36VTTfdNDvssEP+9E//tKfrAgCAXrHGQPzmm2/m9NNPzwsvvJCRI0emqakpL730UvbY\nY4/MmDEjQ4cO7a06AQCgR6wxEE+dOjWtra256aabMmDAgCTJ8uXLc9VVV2X69Om57LLLeqVIAGhk\n9rRDba1xD/Hzzz+fs88+uysMJ8nAgQNz9tln57nnnuvx4gAAoKetMRAPGjRoteNNTU3ZZBN/jwcA\nQP1bY6ptamraoGMAAFAv1riH+IUXXsh+++33sfFqtZrXX3+9x4oCAIDessZAfO+99yZJ2tvb8y//\n8i8ZPHhwxo4da7sEAAANY42BePDgwZk4cWJ++ctfZsSIEWlqasr3vve97LHHHvnOd77TWzUCAECP\nWWMg/ta3vuVt16ABeEun7uF5BGhM3nYNAICieds1AACK5m3XAAAomrddAwCgaOv0tmsAANCo1hiI\nP/vZz/ZWHQAAUBP+Mg4AgKIJxAAAFE0gBgCgaGvcQwwA0Oh8CiU1D8RLly7NWWedlXfffTcDBw7M\nFVdckS222CLz58/Pt7/97fTr1y9jxozJaaedliS5+uqr89BDD6V///654IILsttuu9W4AwAA6lnN\nt0zcdddd2WmnnXLbbbdl3LhxueGGG5Ikl1xySWbMmJHbb789Tz/9dJ577rksWLAgTzzxRGbPnp0r\nr7wyU6ZMqXH1AADUu5pfId5pp53yq1/9KknS3t6e/v37p729PcuXL8+IESOSJGPGjMncuXMzcODA\njBkzJk1NTdl6662zcuXKvPXWWxk+fHgtWwAAoI71aiCePXt2br755lXGJk2alEcffTTjxo3L73//\n+9x6661pb2/PkCFDuu7T3NycV155JYMGDcqwYcNWGV+6dOk6BeJKpdJ9jXSzvlwbvc96YG2sETbE\nhqybDV1rvf24etCoz3+jvNa9Gojb2trS1ta2ythpp52WE088MRMmTMjChQszceLE3H777eno6Oi6\nT0dHR4YOHZoBAwZ8bLylpWWd5m5tbe2eJtbVP6z7XXu9NvqsSqViPbBG1gir2JDfNRv6+6m3H1cP\nGvX5b9DXek0hvOZ7iIcOHdoVaj/96U+no6MjQ4YMyYABA/LrX/861Wo1jzzySEaPHp1Ro0blkUce\nSWdnZ5YsWZLOzk7bJQAA2Cg130N8xhln5KKLLsptt92WFStWZOrUqUmSKVOm5Bvf+EZWrlyZMWPG\nZPfdd0+SjB49OuPHj09nZ2cmTZpUy9IBAGgANQ/EW221Va6//vqPje+xxx6ZNWvWx8YnTpyYiRMn\n9kZpAAAUoOZbJgAAoJZqfoW4Ua3uU2/8MQwA0JvkkXXjCjEAAEUTiAEAKJpADABA0QRiAACKJhAD\nAFA0gRgAgKIJxAAAFE0gBgCgaAIxAABFE4gBACiaQAwAQNEEYgAAita/1gUAANSj6iXVWpdAN3GF\nGACAognEAAAUTSAGAKBo9hADQJ1a3R7WSqWS1tbWGlQD9csVYgAAiiYQAwBQNIEYAICiCcQAABRN\nIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIpWk0B833335Zxzzum6PX/+/LS1tWXChAm5+uqru8av\nvvrqHHHEEZkwYUKeeeaZJMlbb72V448/PkcffXTOPPPMLFu2rNfrBwCgcfR6IJ42bVpmzJiRzs7O\nrrFLLrkkM2bMyO23356nn346zz33XBYsWJAnnngis2fPzpVXXpkpU6YkSa699toceOCBue2227LL\nLrtk5syZvd0CAAANpNcD8ahRozJ58uSu2+3t7Vm+fHlGjBiRpqamjBkzJnPnzk2lUsmYMWPS1NSU\nrbfeOitXrsxbb72VSqWSvffeO0kyduzYzJ07t7dbAACggfTvqRPPnj07N9988ypj06dPz7hx4zJv\n3ryusfb29gwZMqTrdnNzc1555ZUMGjQow4YNW2V86dKlaW9vT0tLyypj66JSqWxMO92mr9RB32WN\nsDbWCGvTXWtkQ8/T249rVD35PNbrGukpPRaI29ra0tbWttb7DRkyJB0dHV23Ozo6MnTo0AwYMOBj\n4y0tLV3333TTTbvuuy5aW1vXv4luVqlU+kQd9F3WCGtjjbA2a10j/7Du51rlPL39uEbVB57HPrdG\nesmaQnjN32ViyJAhGTBgQH7961+nWq3mkUceyejRozNq1Kg88sgj6ezszJIlS9LZ2Znhw4dn1KhR\nefjhh5Mkc+bMKeObBwCAHtNjV4jXx5QpU/KNb3wjK1euzJgxY7L77rsnSUaPHp3x48ens7MzkyZN\nSpKceuqpOe+88zJr1qx86lOfyowZM2pZOgAAda4mgXjPPffMnnvu2XV7jz32yKxZsz52v4kTJ2bi\nxImrjG2++ea54YYberxGAADKUPMtEwAAUEt9YssEAAB9Q/WSaq1L6HWuEAMAUDSBGACAognEAAAU\nTSAGAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhADAFA0gRgAgKL56GYAKEiJH8sLa+MKMQAARROI\nAQAomkAMAEDRBGIAAIomEAMAUDSBGACAognEAAAUTSAGAKBoAjEAAEUTiAEAKJpADABA0QRiAACK\nJhADAFA0gRgAgKIJxAAAFK0mgfi+++7LOeec03X7sccey/jx43PMMcfk9NNPz7Jly5IkV199dY44\n4ohMmDAhzzzzTJLkrbfeyvHHH5+jjz46Z555Ztd9AQBgQ/R6IJ42bVpmzJiRzs7OrrHJkyfnmmuu\nya233pqRI0dm9uzZWbBgQZ544onMnj07V155ZaZMmZIkufbaa3PggQfmtttuyy677JKZM2f2dgsA\n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\nEAMAUDSBGACAognEAAAUTSAGAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhADAFA0gRgAgKLVbSB+\n880388UvfjEvvvhirUsBAKCO1WUg/uCDDzJp0qRsuummtS4FAIA6V5eB+PLLL8+ECROy5ZZb1roU\nAADqXFO1Wq3Wuoj1cdddd+V3v/td/vt//+859thjM3ny5Oywww5rfEylUuml6qB3jF66tNYlbLCn\nWlpqXQIAhWptbV3teN0F4mOOOSZNTU1pamrKz3/+82y77ba57rrrssUWW3ziYyqVyic+AdQPr+O/\na3rooVqXsMGq++yzUY+3DrAGsAbYkDWwpsf0746ietOtt97a9fWHV4jXFIYBAGBN6nIPMQAAdJe6\nu0L8x2655ZZalwAAQJ1zhRgAgKIJxAAAFE0gBgCgaAIxAABFE4gBACiaQAwAQNEEYgAAiiYQAwBQ\nNIEYAICiCcQAABRNIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIomEAMAUDSBGACAognEAAAUTSAG\nAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhADAFA0gRgAgKIJxAAAFE0gBgCgaAIxAABFE4gBACia\nQAwAQNEEYgAAiiYQAwBQNIEYAICiCcQAABRNIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIomEAMA\nULT+tS5gfa1cuTIXXXRRXnrppTQ1NWXKlCnZaaedal0WAAB1qu6uED/44INJkjvuuCNnnnlmvvvd\n79a4IgAA6lndXSH+0pe+lH322SdJsmTJkgwdOrS2BQEAUNfqLhAnSf/+/XPeeeflvvvuy/e///1a\nlwMAQB1rqlar1VoXsaFef/31HHnkkfnpT3+azTbb7BPvV6lUerEq2DCjly6tdQm94qmWllqXAECh\nWltbVzted1eI77777rz66qs5+eSTM3jw4DQ1NWWTTda+FfqTngDqR6VSaezX8aGHal1Br9jY17Dh\n1wFrZQ1gDbAha2BNF0jrLhB/+ctfzvnnn59jjjkmK1asyAUXXJBNN9201mUBAFCn6i4Qb7bZZvne\n975X6zIAAGgQdfe2awAA0J0EYgAAiiYQAwBQNIEYAICiCcQAABRNIAYAoGgCMQAARROIAQAomkAM\nAEDRavZJdZ/73OfS1NSUJKlWq6sca2pqys9//vNalAUAQGFqFogXLlxYq6kBAKBLzQLxh955553c\nc889efvtt1e5UnzaaafVsCoAAEpR80B8xhlnpKWlJTvuuGPXFgoAAOgtNQ/Eb7zxRm688cZalwEA\nQKFq/i4TO++8s/3EAADUTM2vEL/wwgs57LDDMnz48AwaNKhr/IEHHqhhVQAAlKLmgfjKK6/Mww8/\nnMcffzz9+vXLF7/4xey11161LgsAgELUPBD/4Ac/yPvvv58jjzwynZ2d+fu///u88MILufDCC2td\nGgAABah5IH766afzs5/9rOv2vvvumwMPPLCGFQEAUJKa/1HdZz7zmSxatKjr9htvvJGtttqqhhUB\nAFCSml8hXrFiRQ4++OCMHj06/fv3T6VSyRZbbJHjjjsuSfJ3f/d3Na4QAIBGVvNAPHHixFVuH3/8\n8TWqBACAEtU8EH/+85+vdQkAABSs5nuIAQCglgRiAACKJhADAFA0gRgAgKIJxAAAFE0gBgCgaAIx\nAABFE4gBACiaQAwAQNEEYgAAiiYQAwBQNIEYAICiCcQAABRNIAYAoGgCMQAARROIAQAomkAMAEDR\n+te6gPX1wQcf5IILLshvfvObLF++PKeeemr222+/WpcFAECdqrtA/JOf/CTDhg3LFVdckbfffjuH\nHHKIQAwAwAaru0D8la98JQcccECSpFqtpl+/fjWuCACAelZ3gbi5uTlJ0t7entNPPz1nnnlmjSsC\nAKCeNVWr1Wqti1hfv/3tb/M3f/M3Ofroo3PEEUes9f6VSqUXqqLRjV66tNYlNISnWlpqXQIAhWpt\nbV3teN1dIX7jjTdy/PHHZ9KkSdlrr73W+XGf9ARQPyqVSm1fx4ceqt3cDWRjX8OarwNqzhrAGmBD\n1sCaLpDW3duu/eAHP8g777yTa6+9Nscee2yOPfbYvPfee7UuCwCAOlV3V4gvuuiiXHTRRbUuAwCA\nBlF3V4gBAKA7CcQAABRNIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIomEAMAUDSBGACAognEAAAU\nTSAGAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhADAFA0gRgAgKIJxAAAFE0gBgCgaAIxAABFE4gB\nACiaQAwAQNEEYgAAiiYQAwBQNIEYAICiCcQAABRNIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIom\nEAMAUDSBGACAognEAAAUTSAGAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhADAFA0gRgAgKLVbSB+\n+umnc+yxx9a6DAAA6lz/WhewIa6//vr85Cc/yeDBg2tdCgAAda4urxCPGDEiV111Va3LAACgfeWS\n4wAAIABJREFUATRVq9VqrYvYEIsXL87ZZ5+dWbNmrfW+lUqlFypa1eilS9fr/k+1tPRQJX1LTz8v\n63P+njw39aGnv+96cs3U8/rtSz/v+tLzsr7q+Xnsydr7Ui31ri/9DOsura2tqx2vyy0TG+KTnoAe\n89BD63X3Xq+vVjbiealUKmt/ntbj/Ov9nK9n7fR9Pf5914Nrpp7X78Y+7+v0s2Bd9aHnZX31qd8b\nvfw7b41rwO/f7tOXfoZ9xIb8HFjTBdK63DIBAADdRSAGAKBodRuIt9lmm3XaPwwAAGtSt4EYAAC6\ng0AMAEDRBGIAAIomEAMAUDSBGACAognEAAAUTSAGAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhAD\nAFA0gRgAgKIJxAAAFE0gBgCgaAIxAABFE4gBACiaQAwAQNEEYgAAiiYQAwBQNIEYAICiCcQAABRN\nIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIomEAMAUDSBGACAognEAAAUTSAGAKBoAjEAAEUTiAEA\nKJpADABA0QRiAACKJhADAFA0gRgAgKIJxAAAFE0gBgCgaAIxAABF61/rAtZXZ2dnJk+enOeffz4D\nBw7MtGnTMnLkyFqXBQBAnaq7K8T3339/li9fnpkzZ+acc87JZZddVuuSAACoY3UXiCuVSvbee+8k\nyR577JFnn322xhUBAFDPmqrVarXWRayPCy+8MF/+8pfzxS9+MUmyzz775P7770///p+8+6NSqfRW\neQAA9FGtra2rHa+7PcRDhgxJR0dH1+3Ozs41huHkk5sHAIC62zIxatSozJkzJ0kyf/787LTTTjWu\nCACAelZ3WyY+fJeJX/ziF6lWq5k+fXp22GGHWpcFAECdqrtADAAA3anutkwAAEB3EogBACha3b3L\nBGWoVqsZO3Zstt122yR/eM/pc845J/Pnz8+3v/3t9OvXL2PGjMlpp52WJLn66qvz0EMPpX///rng\ngguy22671bB6uptPqCzPoYcemiFDhiRJttlmm5xyyin55je/maampuy444655JJLsskmm2TWrFm5\n44470r9//5x66qn5y7/8yxpXzsZ6+umn853vfCe33HJLFi1atM6v+3vvvZdzzz03b775Zpqbm3P5\n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\nAKBoAjEAAEUTiAEAKJpADABA0QRiAACKJhADAFA0gRgAgKIJxAAAFE0gBgCgaAIxAABFE4gBACia\nQAwAQNEEYgAAiiYQAwBQNIEYAICiCcQAABRNIAYAoGgCMQAARROIAQAomkAMAEDRBGIAAIomEAMA\nUDSBGACAognEAAAUrX93neidd97JPffck7fffjvVarVr/LTTTuuuKQAAoNt1WyA+44wz0tLSkh13\n3DFNTU3ddVoAAOhR3RaI33jjjdx4443ddToAAOgV3baHeOedd87ChQu763QAANAruu0K8QsvvJBD\nDz00n/70pzNo0KBUq9U0NTXlgQce6K4pAACg23VbIL766qu761QAANBrui0Qb7311rn99tvz+OOP\nZ8WKFfmLv/iL/PVf/3V3nR4AAHpEtwXi//E//kcWLVqUww8/PNVqNXfddVcWL16cCy64oLumAACA\nbtdtgfjRRx/N3XffnU02+cPf6e2zzz456KCDuuv0AADQI7rtXSZWrlyZFStWrHK7X79+3XV6AADo\nEd12hfiggw7Kcccdl7/6q79Kkvz0pz/t+hoAAPqqbgvEp5xySnbeeec8/vjjqVarOeWUU7LPPvt0\n1+kBAKBHbPSWiQULFiRJnnzyyWy22WbZd999s99++6W5uTlPPvnkRhcIAAA9aaOvEN9+++2ZNm1a\nvv/973/sWFNTU/7u7/5uY6cAAIAes9GBeNq0aUmSiy++ODvttNMqx+bPn7/e5+vs7MzkyZPz/PPP\nZ+DAgZk2bVpGjhzZdfyf//mfc80116R///45/PDDc+SRR25cAwAAFG2jA3GlUklnZ2cuuuiifPvb\n3061Wk2SrFixIpMnT8699967Xue7//77s3z58sycOTPz58/PZZddluuuuy5J8sEHH+TSSy/NnXfe\nmcGDB+eoo47Kvvvum80333xj2wAAoFAbHYjnzp2bJ554Iq+99lq+973v/fuJ+/fP+PHj1/t8lUol\ne++9d5Jkjz32yLPPPtt17MUXX8yIESPyJ3/yJ0mS1tbWPPnkk/nqV7+6kV10r3PPPTevvvrqareL\nnHvuuZk9e/ZqH7d48eJss802n3jexYsXZ9ttt13tsba2tlxxxRW9Nt/YsWPXu7+NnbMeemz0/jZ2\nznrosfT+1jZnI/TY6P2tbc5G6LHk/pLG6LGv2ehAPHHixCTJ3XffnUMOOWSjC2pvb8+QIUO6bvfr\n1y8rVqxI//79097enpaWlq5jzc3NaW9vX6fzViqVja5tXd16662fOOett96a1157LVtuueXHjm25\n5ZYZO3bsah83duzYrqvnH/Xaa6/l1ltvzYQJE3ptvvvvv3+9+yuhx0bvr4QeS+6vhB4bvb8Seiy5\nv0bpsS9qqn64x2EDXXXVVZk4cWLOP//81R6/9NJL1+t8l156aXbfffeMGzcuyR9epDlz5iRJFi5c\nmBkzZuT6669PkkyfPj2jRo3KV77ylTWes1KppLW1db3q2Bjbbrttli9fniVLlqz2WJK8/PLL3Trf\nJ52zp+brzf7Wdt5G6LHR+1vbeRuhx0bvb23nbYQeG72/tZ23EXps9P7Wdt5G6bGnrCkPbvQV4j/7\nsz9Lknz+85/f2FMlSUaNGpUHH3ww48aNy/z581f5Q70ddtghixYtyttvv53NNtssTz31VE444YRu\nmRcAgDJtdCDed999kySHHnpo12Xzp556Ks8//3wOPfTQ9T7f/vvvn0cffTQTJkxItVrN9OnTc889\n9+Tdd9/N+PHj881vfjMnnHBCqtVqDj/88Gy11VYb2wIAAAXrtk+qu+SSS7LJJpvkmGOOyTnnnJMv\nfOELefzxx3PVVVet13k22WSTfOtb31plbIcdduj6et999+0K4QAAsLE2+pPqPvT//t//y6RJk/KP\n//iPOeKIIzJ9+vT85je/6a7TAwBAj+i2QLxy5cp0dnbmgQceyNixY7Ns2bK899573XV6AADoEd0W\niA855JCMGTMmn/3sZ7P77rvnsMMO26D3IQYAgN7UbXuIv/a1r+W4447LsmXL8s477+TWW2/N8OHD\nu+v0AADQI7otEL/yyis566yz8sorr6SzszOf/exn8z//5/9c4yetAABArXXblolJkyblxBNPzLx5\n8/Lkk0/m61//ei6++OLuOj0AAPSIbgvE//Zv/7bKJ8aNGzcub7/9dnedHgAAekS3BeKBAwdmwYIF\nXbefffbZDB48uLtODwAAPaLb9hBfeOGFmThxYoYNG5ZqtZrf//73+e53v9tdpwcAgB6x0YH41Vdf\nzdSpU7No0aLstddeOfTQQ9PS0pLtttsuAwcO7I4aAQCgx2z0lokLLrgg22+/fc4999x0dnbmxz/+\ncf7jf/yPwjAAAHWhW64Q33DDDUmSvfbaK4cccshGFwUAAL1lo68QDxgwYJWv//g2AAD0dd32LhMf\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1e7e4b8ada0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from __future__ import division\n",
    "from vnpy.trader.vtConstant import EMPTY_STRING, EMPTY_FLOAT\n",
    "from vnpy.trader.app.ctaStrategy.ctaTemplate import (CtaTemplate,\n",
    "                                                     BarGenerator,\n",
    "                                                     ArrayManager)\n",
    "import talib as ta\n",
    "from datetime import datetime, timedelta\n",
    "import pandas as pd\n",
    "\n",
    "########################################################################\n",
    "# 策略继承CtaTemplate\n",
    "class StepOptimizeMaStrategy(CtaTemplate):\n",
    "    \"\"\"双指数均线策略Demo\"\"\"\n",
    "    className = 'StepOptimizeMaStrategy'\n",
    "    author = 'ChannelCMT'\n",
    "\n",
    "    # 策略交易标的的列表\n",
    "    symbolList = []         # 初始化为空\n",
    "    posDict = {}  # 初始化仓位字典\n",
    "\n",
    "    # 多空仓位\n",
    "    Longpos = EMPTY_STRING        # 多头品种仓位\n",
    "    Shortpos = EMPTY_STRING       # 空头品种仓位\n",
    "\n",
    "    # 策略参数\n",
    "#     fastWindow = 40     # 快速均线参数\n",
    "#     slowWindow = 70     # 慢速均线参数\n",
    "    amWindow = 100\n",
    "    parameterDf = stepParameter\n",
    "    initDays = 1       # 初始化数据所用的天数\n",
    "\n",
    "    # 策略变量\n",
    "    fastMa0 = EMPTY_FLOAT   # 当前最新的快速EMA\n",
    "    fastMa1 = EMPTY_FLOAT   # 上一根的快速EMA\n",
    "    slowMa0 = EMPTY_FLOAT   # 当前最新的慢速EMA\n",
    "    slowMa1 = EMPTY_FLOAT   # 上一根的慢速EMA\n",
    "    maTrend = 0             # 均线趋势，多头1，空头-1\n",
    "    parameter = pd.DataFrame()\n",
    "    stepDate = 20\n",
    "\n",
    "    # 参数列表，保存了参数的名称\n",
    "    paramList = ['name',\n",
    "                 'className',\n",
    "                 'author',\n",
    "                 'vtSymbol',\n",
    "                 'symbolList',\n",
    "                 'fastWindow',\n",
    "                 'slowWindow',\n",
    "                 'parameterDict',\n",
    "                 'amWindow']\n",
    "\n",
    "    # 变量列表，保存了变量的名称\n",
    "    varList = ['inited',\n",
    "               'trading',\n",
    "               'posDict',\n",
    "               'fastMa0',\n",
    "               'fastMa1',\n",
    "               'slowMa0',\n",
    "               'slowMa1',\n",
    "               'maTrend',\n",
    "               'parameter',\n",
    "               'runDays']\n",
    "\n",
    "    # 同步列表，保存了需要保存到数据库的变量名称\n",
    "    syncList = ['posDict']\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def __init__(self, ctaEngine, setting):\n",
    "\n",
    "        # 首先找到策略的父类（就是类CtaTemplate），然后把DoubleMaStrategy的对象转换为类CtaTemplate的对象\n",
    "        super(StepOptimizeMaStrategy, self).__init__(ctaEngine, setting)\n",
    "\n",
    "        # 生成仓位记录的字典\n",
    "        symbol = self.symbolList[0]\n",
    "        self.Longpos = symbol.replace('.','_')+\"_LONG\"\n",
    "        self.Shortpos = symbol.replace('.','_')+\"_SHORT\"\n",
    "\n",
    "\n",
    "        self.bg60 = BarGenerator(self.onBar, 60, self.on60MinBar)\n",
    "        self.bg60Dict = {\n",
    "            sym: self.bg60\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "\n",
    "\n",
    "        self.bg15 = BarGenerator(self.onBar, 15, self.on15MinBar)\n",
    "        self.bg15Dict = {\n",
    "            sym: self.bg15\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "\n",
    "        # 生成Bar数组\n",
    "        self.am60Dict = {\n",
    "            sym: ArrayManager(size=self.amWindow)\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "\n",
    "        self.am15Dict = {\n",
    "            sym: ArrayManager(size=self.amWindow)\n",
    "            for sym in self.symbolList\n",
    "        }\n",
    "\n",
    "        self.i = 0\n",
    "    #----------------------------------------------------------------------\n",
    "    def onInit(self):\n",
    "        \"\"\"初始化策略（必须由用户继承实现）\"\"\"\n",
    "        self.writeCtaLog(u'双EMA演示策略初始化')\n",
    "        # 初始化仓位字典\n",
    "        if not self.posDict:\n",
    "            for symbolPos in [self.Longpos,self.Shortpos]:\n",
    "                self.posDict[symbolPos] = 0\n",
    "\n",
    "        # 初始化历史数据天数\n",
    "        initData = self.loadBar(self.initDays)\n",
    "        for bar in initData:\n",
    "            self.onBar(bar)\n",
    "\n",
    "        self.putEvent()\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onStart(self):\n",
    "        \"\"\"启动策略（必须由用户继承实现）\"\"\"\n",
    "        self.writeCtaLog(u'双EMA演示策略启动')\n",
    "        self.putEvent()\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onStop(self):\n",
    "        \"\"\"停止策略（必须由用户继承实现）\"\"\"\n",
    "        self.writeCtaLog(u'双EMA演示策略停止')\n",
    "        self.putEvent()\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onTick(self, tick):\n",
    "        \"\"\"收到行情TICK推送（必须由用户继承实现）\"\"\"\n",
    "        pass\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onBar(self, bar):\n",
    "        \"\"\"收到Bar推送（必须由用户继承实现）\"\"\"\n",
    "        self.cancelAll()\n",
    "        symbol = bar.vtSymbol\n",
    "        # 基于60分钟判断趋势过滤，因此先更新\n",
    "        bg60 = self.bg60Dict[symbol]\n",
    "        bg60.updateBar(bar)\n",
    "\n",
    "        # 基于15分钟判断\n",
    "        bg15 = self.bg15Dict[symbol]\n",
    "        bg15.updateBar(bar)\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def on60MinBar(self, bar):\n",
    "        \"\"\"60分钟K线推送\"\"\"\n",
    "#         print(datetime.strptime(bar.date, \"%Y%m%d\"))\n",
    "#         print(self.parameterDf)\n",
    "#         print(self.parameterDf.index[self.i])\n",
    "        if datetime.strptime(bar.date, \"%Y%m%d\")<=self.parameterDf.index[self.i]+timedelta(days=self.stepDate):\n",
    "            self.parameter = self.parameterDf.iloc[self.i]\n",
    "        elif datetime.strptime(bar.date, \"%Y%m%d\")>=self.parameterDf.index[self.i]+timedelta(days=self.stepDate):\n",
    "            self.i = self.i + 1\n",
    "        else:\n",
    "            return\n",
    "\n",
    "        symbol = bar.vtSymbol\n",
    "        am60 = self.am60Dict[symbol]\n",
    "        am60.updateBar(bar)\n",
    "\n",
    "        if not am60.inited:\n",
    "            return\n",
    "\n",
    "        # 计算均线并判断趋势\n",
    "        fastMa = ta.MA(am60.close, self.parameter['fastWindow'])\n",
    "        slowMa = ta.MA(am60.close, self.parameter['slowWindow'])\n",
    "\n",
    "        if fastMa[-1] > slowMa[-1]:\n",
    "            self.maTrend = 1\n",
    "        else:\n",
    "            self.maTrend = -1\n",
    "#         发出状态更新事件\n",
    "        self.putEvent()\n",
    "    #----------------------------------------------------------------------\n",
    "    def on15MinBar(self, bar):\n",
    "        \"\"\"收到Bar推送（必须由用户继承实现）\"\"\"\n",
    "        self.cancelAll() # 全部撤单\n",
    "        symbol = bar.vtSymbol\n",
    "\n",
    "        am15 = self.am15Dict[symbol]\n",
    "        am15.updateBar(bar)\n",
    "        if not am15.inited:\n",
    "            return\n",
    "\n",
    "        fastMa = ta.EMA(am15.close, self.parameter['fastWindow'])\n",
    "\n",
    "        self.fastMa0 = fastMa[-1]\n",
    "        self.fastMa1 = fastMa[-2]\n",
    "\n",
    "        slowMa = ta.EMA(am15.close, self.parameter['slowWindow'])\n",
    "        self.slowMa0 = slowMa[-1]\n",
    "        self.slowMa1 = slowMa[-2]\n",
    "\n",
    "        # 判断买卖\n",
    "        crossOver = self.fastMa0>self.fastMa1 and self.slowMa0>self.slowMa1     # 均线上涨\n",
    "        crossBelow = self.fastMa0<self.fastMa1 and self.slowMa0<self.slowMa1    # 均线下跌\n",
    "\n",
    "        # 金叉和死叉的条件是互斥\n",
    "        if crossOver and self.maTrend==1:\n",
    "            # 如果金叉时手头没有持仓，则直接做多\n",
    "            if (self.posDict[self.Longpos]==0) and (self.posDict[self.Shortpos]==0):\n",
    "                self.buy(symbol,bar.close, 1)\n",
    "            # 如果有空头持仓，则先平空，再做多\n",
    "            elif self.posDict[self.Shortpos] == 1:\n",
    "                self.cover(symbol,bar.close, 1)\n",
    "                self.buy(symbol,bar.close, 1)\n",
    "\n",
    "        # 死叉和金叉相反\n",
    "        elif crossBelow and self.maTrend==-1:\n",
    "            if (self.posDict[self.Longpos]==0) and (self.posDict[self.Shortpos]==0):\n",
    "                self.short(symbol,bar.close, 1)\n",
    "            elif self.posDict[self.Longpos] == 1:\n",
    "                self.sell(symbol,bar.close, 1)\n",
    "                self.short(symbol,bar.close, 1)\n",
    "\n",
    "\n",
    "        # 发出状态更新事件\n",
    "        self.putEvent()\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onOrder(self, order):\n",
    "        \"\"\"收到委托变化推送（必须由用户继承实现）\"\"\"\n",
    "        # 对于无需做细粒度委托控制的策略，可以忽略onOrder\n",
    "        pass\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onTrade(self, trade):\n",
    "        \"\"\"收到成交推送（必须由用户继承实现）\"\"\"\n",
    "        # 对于无需做细粒度委托控制的策略，可以忽略onOrder\n",
    "#         print(self.posDict)\n",
    "        pass\n",
    "\n",
    "    #----------------------------------------------------------------------\n",
    "    def onStopOrder(self, so):\n",
    "        \"\"\"停止单推送\"\"\"\n",
    "        pass\n",
    "\n",
    "if __name__==\"__main__\":\n",
    "    from vnpy.trader.app.ctaStrategy.ctaBacktesting import BacktestingEngine, OptimizationSetting, MINUTE_DB_NAME\n",
    "    # 创建回测引擎对象\n",
    "    engine = BacktestingEngine()\n",
    "    # 设置回测使用的数据\n",
    "    engine.setBacktestingMode(engine.BAR_MODE)    # 设置引擎的回测模式为K线\n",
    "    engine.setDatabase(MINUTE_DB_NAME)  # 设置使用的历史数据库\n",
    "    engine.setStartDate('20180222',initDays=1)               # 设置回测用的数据起始日期\n",
    "    engine.setEndDate('20180630')\n",
    "    # 配置回测引擎参数\n",
    "    engine.setSlippage(0.2)     # 设置滑点为股指1跳\n",
    "    engine.setRate(1/1000)   # 设置手续费万0.3\n",
    "    engine.setSize(1)         # 设置合约大小\n",
    "    # engine.setPriceTick(0.01)    # 设置股指最小价格变动\n",
    "    engine.setCapital(1000000)  # 设置回测本金\n",
    "\n",
    "    # # 在引擎中创建策略对象\n",
    "    d = {'symbolList':['tBTCUSD:bitfinex']}          # 策略参数配置\n",
    "    engine.initStrategy(StepOptimizeMaStrategy, d)    # 创建策略对象\n",
    "    engine.runBacktesting()\n",
    "    # 显示逐日回测结果\n",
    "    engine.showDailyResult()\n",
    "    # 显示逐笔回测结果\n",
    "    engine.showBacktestingResult()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "TradeID: 1, Time: 2018-02-25 03:01:00, Direction: 空, Price: 9520.9, Volume: 1\n",
      "TradeID: 2, Time: 2018-02-27 08:01:00, Direction: 多, Price: 10332.0, Volume: 1\n",
      "TradeID: 3, Time: 2018-02-27 08:01:00, Direction: 多, Price: 10332.0, Volume: 1\n",
      "TradeID: 4, Time: 2018-03-06 23:01:00, Direction: 空, Price: 10989.0, Volume: 1\n",
      "TradeID: 5, Time: 2018-03-06 23:01:00, Direction: 空, Price: 10989.0, Volume: 1\n",
      "TradeID: 6, Time: 2018-03-12 12:46:00, Direction: 多, Price: 9529.9, Volume: 1\n",
      "TradeID: 7, Time: 2018-03-12 12:46:00, Direction: 多, Price: 9529.9, Volume: 1\n",
      "TradeID: 8, Time: 2018-03-14 12:16:00, Direction: 空, Price: 9113.0, Volume: 1\n",
      "TradeID: 9, Time: 2018-03-14 12:16:00, Direction: 空, Price: 9113.0, Volume: 1\n",
      "TradeID: 10, Time: 2018-03-20 05:01:00, Direction: 多, Price: 8410.3, Volume: 1\n",
      "TradeID: 11, Time: 2018-03-20 05:01:00, Direction: 多, Price: 8410.3, Volume: 1\n",
      "TradeID: 12, Time: 2018-03-23 14:01:00, Direction: 空, Price: 8420.0, Volume: 1\n",
      "TradeID: 13, Time: 2018-03-23 14:01:00, Direction: 空, Price: 8420.0, Volume: 1\n",
      "TradeID: 14, Time: 2018-03-25 22:46:00, Direction: 多, Price: 8586.6, Volume: 1\n",
      "TradeID: 15, Time: 2018-03-25 22:46:00, Direction: 多, Price: 8586.6, Volume: 1\n",
      "TradeID: 16, Time: 2018-03-26 09:16:00, Direction: 空, Price: 8407.6, Volume: 1\n",
      "TradeID: 17, Time: 2018-03-26 09:16:00, Direction: 空, Price: 8407.6, Volume: 1\n",
      "TradeID: 18, Time: 2018-04-02 20:01:00, Direction: 多, Price: 7038.4, Volume: 1\n",
      "TradeID: 19, Time: 2018-04-02 20:01:00, Direction: 多, Price: 7038.4, Volume: 1\n",
      "TradeID: 20, Time: 2018-04-05 06:01:00, Direction: 空, Price: 6816.3, Volume: 1\n",
      "TradeID: 21, Time: 2018-04-05 06:01:00, Direction: 空, Price: 6816.3, Volume: 1\n",
      "TradeID: 22, Time: 2018-04-07 23:01:00, Direction: 多, Price: 6864.0, Volume: 1\n",
      "TradeID: 23, Time: 2018-04-07 23:01:00, Direction: 多, Price: 6864.0, Volume: 1\n",
      "TradeID: 24, Time: 2018-04-10 06:31:00, Direction: 空, Price: 6696.0, Volume: 1\n",
      "TradeID: 25, Time: 2018-04-10 06:31:00, Direction: 空, Price: 6696.0, Volume: 1\n",
      "TradeID: 26, Time: 2018-04-12 07:01:00, Direction: 多, Price: 6922.9975312, Volume: 1\n",
      "TradeID: 27, Time: 2018-04-12 07:01:00, Direction: 多, Price: 6922.9975312, Volume: 1\n",
      "TradeID: 28, Time: 2018-04-17 04:01:00, Direction: 空, Price: 7974.7, Volume: 1\n",
      "TradeID: 29, Time: 2018-04-17 04:01:00, Direction: 空, Price: 7974.7, Volume: 1\n",
      "TradeID: 30, Time: 2018-04-19 08:01:00, Direction: 多, Price: 8169.4, Volume: 1\n",
      "TradeID: 31, Time: 2018-04-19 08:01:00, Direction: 多, Price: 8169.4, Volume: 1\n",
      "TradeID: 32, Time: 2018-04-26 09:01:00, Direction: 空, Price: 8792.6, Volume: 1\n",
      "TradeID: 33, Time: 2018-04-26 09:01:00, Direction: 空, Price: 8792.6, Volume: 1\n",
      "TradeID: 34, Time: 2018-04-27 20:01:00, Direction: 多, Price: 9305.0, Volume: 1\n",
      "TradeID: 35, Time: 2018-04-27 20:01:00, Direction: 多, Price: 9305.0, Volume: 1\n",
      "TradeID: 36, Time: 2018-05-01 07:01:00, Direction: 空, Price: 9196.1, Volume: 1\n",
      "TradeID: 37, Time: 2018-05-01 07:01:00, Direction: 空, Price: 9196.1, Volume: 1\n",
      "TradeID: 38, Time: 2018-05-03 10:01:00, Direction: 多, Price: 9238.1, Volume: 1\n",
      "TradeID: 39, Time: 2018-05-03 10:01:00, Direction: 多, Price: 9238.1, Volume: 1\n",
      "TradeID: 40, Time: 2018-05-07 02:31:00, Direction: 空, Price: 9579.98135697, Volume: 1\n",
      "TradeID: 41, Time: 2018-05-07 02:31:00, Direction: 空, Price: 9579.98135697, Volume: 1\n",
      "TradeID: 42, Time: 2018-05-10 15:46:00, Direction: 多, Price: 9333.0, Volume: 1\n",
      "TradeID: 43, Time: 2018-05-10 15:46:00, Direction: 多, Price: 9333.0, Volume: 1\n",
      "TradeID: 44, Time: 2018-05-11 08:01:00, Direction: 空, Price: 9010.8, Volume: 1\n",
      "TradeID: 45, Time: 2018-05-11 08:01:00, Direction: 空, Price: 9010.8, Volume: 1\n",
      "TradeID: 46, Time: 2018-05-14 03:01:00, Direction: 多, Price: 8620.0, Volume: 1\n",
      "TradeID: 47, Time: 2018-05-14 03:01:00, Direction: 多, Price: 8620.0, Volume: 1\n",
      "TradeID: 48, Time: 2018-05-16 09:01:00, Direction: 空, Price: 8458.9, Volume: 1\n",
      "TradeID: 49, Time: 2018-05-16 09:01:00, Direction: 空, Price: 8458.9, Volume: 1\n",
      "TradeID: 50, Time: 2018-05-19 18:16:00, Direction: 多, Price: 8230.2, Volume: 1\n",
      "TradeID: 51, Time: 2018-05-19 18:16:00, Direction: 多, Price: 8230.2, Volume: 1\n",
      "TradeID: 52, Time: 2018-05-22 14:01:00, Direction: 空, Price: 8283.7, Volume: 1\n",
      "TradeID: 53, Time: 2018-05-22 14:01:00, Direction: 空, Price: 8283.7, Volume: 1\n",
      "TradeID: 54, Time: 2018-05-27 05:46:00, Direction: 多, Price: 7536.8, Volume: 1\n",
      "TradeID: 55, Time: 2018-05-27 05:46:00, Direction: 多, Price: 7536.8, Volume: 1\n",
      "TradeID: 56, Time: 2018-05-27 09:01:00, Direction: 空, Price: 7245.1, Volume: 1\n",
      "TradeID: 57, Time: 2018-05-27 09:01:00, Direction: 空, Price: 7245.1, Volume: 1\n",
      "TradeID: 58, Time: 2018-05-30 05:01:00, Direction: 多, Price: 7503.3, Volume: 1\n",
      "TradeID: 59, Time: 2018-05-30 05:01:00, Direction: 多, Price: 7503.3, Volume: 1\n",
      "TradeID: 60, Time: 2018-06-02 04:31:00, Direction: 空, Price: 7419.8, Volume: 1\n",
      "TradeID: 61, Time: 2018-06-02 04:31:00, Direction: 空, Price: 7419.8, Volume: 1\n",
      "TradeID: 62, Time: 2018-06-02 19:01:00, Direction: 多, Price: 7653.9, Volume: 1\n",
      "TradeID: 63, Time: 2018-06-02 19:01:00, Direction: 多, Price: 7653.9, Volume: 1\n",
      "TradeID: 64, Time: 2018-06-04 20:01:00, Direction: 空, Price: 7505.87459629, Volume: 1\n",
      "TradeID: 65, Time: 2018-06-04 20:01:00, Direction: 空, Price: 7505.87459629, Volume: 1\n",
      "TradeID: 66, Time: 2018-06-06 14:16:00, Direction: 多, Price: 7621.8, Volume: 1\n",
      "TradeID: 67, Time: 2018-06-06 14:16:00, Direction: 多, Price: 7621.8, Volume: 1\n",
      "TradeID: 68, Time: 2018-06-08 20:01:00, Direction: 空, Price: 7558.8, Volume: 1\n",
      "TradeID: 69, Time: 2018-06-08 20:01:00, Direction: 空, Price: 7558.8, Volume: 1\n",
      "TradeID: 70, Time: 2018-06-15 04:01:00, Direction: 多, Price: 6636.9, Volume: 1\n",
      "TradeID: 71, Time: 2018-06-15 04:01:00, Direction: 多, Price: 6636.9, Volume: 1\n",
      "TradeID: 72, Time: 2018-06-16 11:46:00, Direction: 空, Price: 6405.4, Volume: 1\n",
      "TradeID: 73, Time: 2018-06-16 11:46:00, Direction: 空, Price: 6405.4, Volume: 1\n",
      "TradeID: 74, Time: 2018-06-17 16:01:00, Direction: 多, Price: 6527.7, Volume: 1\n",
      "TradeID: 75, Time: 2018-06-17 16:01:00, Direction: 多, Price: 6527.7, Volume: 1\n",
      "TradeID: 76, Time: 2018-06-18 13:01:00, Direction: 空, Price: 6410.0, Volume: 1\n",
      "TradeID: 77, Time: 2018-06-18 13:01:00, Direction: 空, Price: 6410.0, Volume: 1\n",
      "TradeID: 78, Time: 2018-06-19 05:01:00, Direction: 多, Price: 6730.0, Volume: 1\n",
      "TradeID: 79, Time: 2018-06-19 05:01:00, Direction: 多, Price: 6730.0, Volume: 1\n",
      "TradeID: 80, Time: 2018-06-21 21:01:00, Direction: 空, Price: 6716.1, Volume: 1\n",
      "TradeID: 81, Time: 2018-06-21 21:01:00, Direction: 空, Price: 6716.1, Volume: 1\n",
      "TradeID: 82, Time: 2018-06-26 06:01:00, Direction: 多, Price: 6268.7, Volume: 1\n",
      "TradeID: 83, Time: 2018-06-26 06:01:00, Direction: 多, Price: 6268.7, Volume: 1\n",
      "TradeID: 84, Time: 2018-06-27 22:16:00, Direction: 空, Price: 6082.7, Volume: 1\n",
      "TradeID: 85, Time: 2018-06-27 22:16:00, Direction: 空, Price: 6082.7, Volume: 1\n"
     ]
    },
    {
     "ename": "KeyError",
     "evalue": "'86'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-25-362e8dc4b46f>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# 显示前10条成交记录\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m     \u001b[0md\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mengine\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtradeDict\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m+\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__dict__\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      4\u001b[0m     \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'TradeID: %s, Time: %s, Direction: %s, Price: %s, Volume: %s'\u001b[0m \u001b[1;33m%\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'tradeID'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'dt'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'direction'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'price'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'volume'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mKeyError\u001b[0m: '86'"
     ]
    }
   ],
   "source": [
    "# 显示前10条成交记录\n",
    "for i in range(100):\n",
    "    d = engine.tradeDict[str(i+1)].__dict__\n",
    "    print('TradeID: %s, Time: %s, Direction: %s, Price: %s, Volume: %s' %(d['tradeID'], d['dt'], d['direction'], d['price'], d['volume']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
